- $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,
- 'on_headers' => $onHeaders,
- 'track_redirect' => true,
- 'strict' => true,
- 'referer' => true,
- ],
- '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 {
+ if (!Network::isRedirectBlocked($url) && $curlResponse->isRedirectUrl()) {
+ $redirects++;
+ $this->logger->notice('Curl redirect.', ['url' => $url, 'to' => $curlResponse->getRedirectUrl()]);
+ @curl_close($ch);