- // Special treatment for HTTP Code 416
- // See https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/416
- if (($curl_info['http_code'] == 416) && ($range > 0)) {
- @curl_setopt($ch, CURLOPT_RANGE, '');
- $s = @curl_exec($ch);
- $curl_info = @curl_getinfo($ch);
- }
-
- $curlResponse = new CurlResult($url, $s, $curl_info, curl_errno($ch), curl_error($ch));
-
- if ($curlResponse->isRedirectUrl()) {
- $redirects++;
- $this->logger->notice('Curl redirect.', ['url' => $url, 'to' => $curlResponse->getRedirectUrl()]);
- @curl_close($ch);
- return $this->get($curlResponse->getRedirectUrl(), $binary, $opts, $redirects);
+ $onHeaders = function (ResponseInterface $response) use ($opts) {
+ if (!empty($opts['content_length']) &&
+ $response->getHeaderLine('Content-Length') > $opts['content_length']) {
+ throw new TransferException('The file is too big!');
+ }
+ };
+
+ $client = new Client([
+ 'allow_redirect' => [
+ 'max' => 8,
+ 'on_redirect' => $onRedirect,
+ 'track_redirect' => true,
+ 'strict' => true,
+ 'referer' => true,
+ ],
+ 'on_headers' => $onHeaders,
+ 'sink' => tempnam(get_temppath(), 'guzzle'),
+ 'curl' => $curlOptions
+ ]);
+
+ try {
+ $response = $client->get($url);
+ return new GuzzleResponse($response, $url);
+ } catch (TransferException $exception) {
+ if ($exception instanceof RequestException &&
+ $exception->hasResponse()) {
+ return new GuzzleResponse($exception->getResponse(), $url, $exception->getCode(), '');
+ } else {
+ return new CurlResult($url, '', ['http_code' => $exception->getCode()], $exception->getCode(), '');
+ }
+ } finally {
+ $this->profiler->saveTimestamp($stamp1, 'network');