У меня есть команда cURL, подобная этой:
curl 'https://www.11880.com' \
-H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36' \
-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 'accept-language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7' \
-H 'authority: www.11880.com'
Выполнение этой команды в командной строке, как в приложении Terminal на моем Mac, приводит к ожидаемому выводу.
(В случае, если выпроверьте сами: если этот вывод содержит слово Sicherheitsüberprüfung
, он геоблокирован, и вы должны использовать немецкий IP для его проверки.)
Я передал точную команду в PHP cURL следующим образом:
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://www.11880.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
$headers = array();
$headers[] = 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36';
$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[] = 'Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7';
$headers[] = 'Authority: www.11880.com';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
?>
Когда я запускаю этот код, я получаю сообщение о том, что мой запрос был распознан как автоматический запрос / робот: он говорит Sicherheitsüberprüfung
, означает security check
.
Конечно, яиспользование одного и того же IP-адреса как для командной строки, так и для запроса PHP cURL.
Почему это? Разве командная строка не совпадает с PHP cURL?
Или с моим PHP-скриптом что-то не так?
ОБНОВЛЕНИЕ
Я случайно обнаружилиз следующего: я использую Coda в качестве редактора кода на моем Mac. Это имеет встроенный движок рендеринга PHP. Используя это с моим сценарием PHP, результат, как и ожидалось. Это тот же результат, который я получаю в командной строке.
ОБНОВЛЕНИЕ 2
Я сделал то, что Jannes Botis
предложил в его ответе. Затем я запустил скрипт PHP в своем приложении редактора кода Coda (с выводом ожидаемого) и с MAMP в качестве локального хоста (что всегда распознается как автоматический запрос).
Я выяснил, что код, выполняемый с помощью MAMP, былиспользуя HTTP/2
, в то время как код, выполняемый в Coda, использует HTTP/1.1
. Чтобы решить эту проблему, я добавил к сценарию следующее:
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
Теперь оба выводят одну и ту же строку:
GET / HTTP/1.1
Host: www.11880.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7
Authority: www.11880.com
Но все равно: один работаетдругой распознается как автоматический запрос.