Я построил скриптовый скрипт на PHP для сбора информации с определенного сайта. Я тщательно протестировал скрипт с загруженными файлами HTML с целевого сайта, поэтому запросы xpath верны. Вчера я впервые попробовал сценарий локально, но нацелился на реальный сайт, и он сработал. Затем я взял сценарий, поместил его на свою ферму серверов и включил.
Этим утром я проснулся с 90 электронными письмами с одного конкретного сервера, в которых говорилось, что произошла ошибка. Другой сервер отправил около 10 электронных писем, в то время как два других, похоже, отлично работают. Я проверил журналы, которые я храню в базе данных, и все обнаруженные ошибки были «502 Bad Gateway». Я пробовал URL через обычный веб-браузер, и он нормально загружается, и я пробовал URL через метод wget на том же сервере. Wget возвращает эту ошибку:
ОШИБКА: сертификат
http://www.targetwebsite.com
не является
доверять.ОШИБКА: сертификат
http://www.targetwebsite.com
не получил
известный эмитент
Использование флага «—no-check-Certificate» все еще приводит к ошибке, но в любом случае загружает файл HTML.
Так или иначе, в моем скрипте у меня есть следующий код:
// Assign Curl Options
$curlOptions = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_ENCODING => "",
CURLOPT_AUTOREFERER => true,
CURLOPT_CONNECTTIMEOUT => 120,
CURLOPT_TIMEOUT => 120,
CURLOPT_MAXREDIRS => 10,
CURLINFO_HEADER_OUT => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_HTTP_VERSION => 'CURL_HTTP_VERSION_1_1',
CURLOPT_COOKIE => $cookiesJar,
CURLOPT_USERAGENT => $userAgent,
);
// URL To scrape
$url = "https://www.targetsite.com/specific/page/";// Build Curl Headers
$ch = curl_init($url);
curl_setopt_array($ch, $curlOptions);
$content = curl_exec($ch);
$err = curl_errno($ch);
$errmsg = curl_error($ch);
$header = curl_getinfo($ch);
$responseCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
Так что это имеет тенденцию работать, но, очевидно, на данный момент не на 100% надежно из-за того, что Cloudfront возвращает 502 ошибки Bad Gateway. Но, в то же время, я никогда раньше не создавал сценарий очистки веб-страниц, и, хотя я уверен, что это все, что мне нужно, чтобы заставить сайт думать, что я законный пользователь, ну, очевидно, я что-то упустил!
Из некоторого чтения, которое я прочитал, шла речь о том, как вам нужно будет передавать шифры на целевой сайт. Итак, я добавил это в опции curl:
CURLOPT_SSL_CIPHER_LIST => 'ECDHE-RSA-AES128-GCM-SHA256, ECDHE-RSA-AES128-SHA256, ECDHE-RSA-AES128-SHA, ECDHE-RSA-AES256-GCM-SHA384, ECDHE-RSA-AES256-SHA384, ECDHE-RSA-AES256-SHA ,AES128-GCM-SHA256, AES256-GCM-SHA384, AES128-SHA256, AES256-SHA, AES128-SHA, RC4-MD5',
Я заметил некоторые улучшения, но я все еще получаю достаточное количество 502.
Если бы кто-нибудь мог мне помочь, это было бы удивительно.
Задача ещё не решена.
Других решений пока нет …