/** * @param Api\Request $request * @param string $signatureMethodName * * @return Api\Response * * @throws Exceptions\InvalidStateException * @throws OAuth\Exceptions\ApiException */ public function makeRequest(Api\Request $request, $signatureMethodName = 'PLAINTEXT') { if (empty($this->responses)) { throw new Exceptions\InvalidStateException("Unexpected request"); } $this->requests[] = $request; $request->setHeaders($request->getHeaders() + ['Accept' => 'application/json']); // the CurlClient is setting this as a default list($content, $httpCode, $headers, $info) = array_shift($this->responses); return new Api\Response($request, $content, $httpCode, $headers, $info); }
/** * @param Request $request * * @return resource */ protected function buildCurlResource(Request $request) { $ch = curl_init((string) $request->getUrl()); $options = $this->curlOptions; $options[CURLOPT_CUSTOMREQUEST] = $request->getMethod(); // configuring a POST request if ($request->isPost() && $request->getPost()) { $options[CURLOPT_POSTFIELDS] = $request->getPost(); } if ($request->isHead()) { $options[CURLOPT_NOBODY] = TRUE; } else { if ($request->isGet()) { $options[CURLOPT_HTTPGET] = TRUE; } } // disable the 'Expect: 100-continue' behaviour. This causes CURL to wait // for 2 seconds if the server does not support this header. $options[CURLOPT_HTTPHEADER]['Expect'] = ''; $tmp = []; foreach ($request->getHeaders() + $options[CURLOPT_HTTPHEADER] as $name => $value) { $tmp[] = trim("{$name}: {$value}"); } $options[CURLOPT_HTTPHEADER] = $tmp; // execute request curl_setopt_array($ch, $options); $this->onRequest($request, $options); return $ch; }