cURL php не показывает тот же результат, что chrome / firefox - PullRequest
1 голос
/ 21 октября 2019

Я из Бангладеш. Когда я использую Chrome или Firefox для посещения https://www.aliexpress.com/item/4000217196656.html,, я вижу, что регион по умолчанию настроен на Бангладеш. Таким образом, содержимое загружается соответственно (например, способы доставки). Но когда я использую тот же браузер с curl (localhost / test / index.php), результат не совпадает. Кто-нибудь может мне помочь?

index.php содержит следующий код

<?php
$curl=curl_init();
curl_setopt($curl,CURLOPT_URL,'https://www.aliexpress.com/item/4000217196656.html');
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);
curl_exec($curl);
curl_close($curl);
?>

1 Ответ

0 голосов
/ 21 октября 2019

В вашем cUrl вы должны отправить те же данные, что и в браузере Chrome (ответ сервера может зависеть от заголовков или даже ваших файлов cookie).

Существует замечательный инструмент Curl toPHP , который может вам помочь. Перейдите в окно Chrome Inspect и на вкладке сети просмотрите отправленный запрос, щелкнув правой кнопкой мыши запрос, вы можете скопировать запрос как cUrl и использовать этот инструмент для генерации PHP-кода для того же HTTP-запроса, что и ваш браузер,

Так, например, для вашего упомянутого URL в моем браузере Chrome я получил следующую команду curl:

curl 'https://www.aliexpress.com/item/4000217196656.html' -H 'authority: www.aliexpress.com' -H 'pragma: no-cache' -H 'cache-control: no-cache' -H 'upgrade-insecure-requests: 1' -H 'user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36' -H 'sec-fetch-mode: navigate' -H 'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3' -H 'sec-fetch-site: none' -H 'accept-encoding: gzip, deflate, br' -H 'accept-language: en-US,en;q=0.9' --compressed

, которая переводится в следующий код PHP:

// Generated by curl-to-PHP: http://incarnate.github.io/curl-to-php/
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://www.aliexpress.com/item/4000217196656.html');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');

curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');

$headers = array();
$headers[] = 'Authority: www.aliexpress.com';
$headers[] = 'Pragma: no-cache';
$headers[] = 'Cache-Control: no-cache';
$headers[] = 'Upgrade-Insecure-Requests: 1';
$headers[] = 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36';
$headers[] = 'Sec-Fetch-Mode: navigate';
$headers[] = 'Sec-Fetch-User: ?1';
$headers[] = 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3';
$headers[] = 'Sec-Fetch-Site: none';
$headers[] = 'Accept-Encoding: gzip, deflate, br';
$headers[] = 'Accept-Language: en-US,en;q=0.9';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}
curl_close($ch);
...