PHP функция cURL возвращает 403 или 503 на работающих и общедоступных веб-сайтах. - PullRequest
0 голосов
/ 14 июля 2020

У меня есть функция curl в PHP, которую я использую для запроса заголовка и описания веб-сайтов. Я протестировал его на более чем 1000 различных веб-сайтов (используя мой существующий список закладок), и он отлично работает, но есть некоторые веб-сайты, которые не работают, потому что cURL возвращает код состояния 403 или 503. Например, ручки CodePen такие сайты, как: https://codepen.io/vrugtehagel/pen/eYJjYNm возвращает ошибку 503 или иногда 403.

Это функция cURL с параметрами, которые я настроил:

$ch = curl_init();

$header[] = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9";
$header[] = "Cache-Control: max-age=0";
$header[] = "Connection: keep-alive";
$header[] = "Keep-Alive: 300";
$header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
$header[] = "Accept-Language: en-GB,en-US;q=0.9,en;q=0.8";
$header[] = "Pragma: no-cache";

// Set agent as MacBook Chrome
$user_agent_chrome = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36';

// Set cURL Options
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent_chrome);
curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($ch, CURLOPT_ENCODING, '');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_MAXREDIRS, 4);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 4);
curl_setopt($ch, CURLOPT_TIMEOUT, 8);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // Staging

// Execute & fetch page string data
$url_data = curl_exec($ch);

// Flag if cURL was terminated
$curl_err = curl_error($ch) ? true : false;

// Get the status (404 | 200 | ... )
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);

// Get final URL (if redirection happened)
$effective_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);

// Terminate connection
curl_close($ch);

Поскольку эти веб-сайты общедоступны и работают в социальных сетях, мне интересно, что может быть неправильно настроено. Я много искал и пробовал другие методы. Может быть, повар ie или конкретный реферер? Кто-нибудь знает, или, может быть, у вас есть собственный хорошо протестированный метод / параметры cURL, которыми вы можете поделиться с нами?

Есть ли где-нибудь в Интернете идеальный пример cURL «должен работать везде» знаете о?

Я пытаюсь обойти эту проблему уже почти четыре месяца, но всегда сдаюсь, потому что не могу понять, почему не работают только несколько второстепенных веб-сайтов. Буду признателен, если кто-нибудь может помочь.

Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...