Я использую Guzzle 6 Http Client для очистки веб-страниц и анализа их с точки зрения SEO, однако интересно то, что Guzzle вообще не отслеживает перенаправления при использовании в производстве, но код точно такой же. Вот фрагмент кода, который я использую для запроса страницы и отслеживания перенаправлений.
$onRedirect = function (RequestInterface $request, ResponseInterface $response, UriInterface $uri): void {
$this->totalRedirects++;
};
$response = $this->httpClient->request('GET', $url, [
'allow_redirects' => [
'max' => self::MAX_REDIRECTS,
'referer' => true,
'track_redirects' => true,
'on_redirect' => $onRedirect
],
'headers' => [
'User-Agent' => self::USER_AGENT
],
'http_errors' => true
]);
$redirectUrls = $response->getHeader('X-Guzzle-Redirect-History');
$redirectStatuses = $response->getHeader('X-Guzzle-Redirect-Status-History');
foreach ($redirectUrls as $key => $redirectUrl) {
$this->responses[] = new HttpResponse($redirectUrl, $redirectStatuses[$key]);
}
//Save last successful response
$this->responses[] = new HttpResponse($url, $response->getStatusCode());
Мое промежуточное ПО для перенаправления вообще не запускается, используя его в работе и возвращает только «307», в то время как в докере я получаю «307» и «200». Это было проверено на странице самаритян - (https://www.samaritans.org/)
В Production и Docker используется PHP 7.2 и Guzzle 6