Как изменить browser's signature в запросе curl (php) ?

Функция курла.

function curl_it($url, $data, $method = 'POST', $headers = array(), $cookiefile = NULL, $referer = NULL)  {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, ($method=='GET') ? CURLOPT_HTTPGET : CURLOPT_POST, true);
if($method!='GET') curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_USERAGENT,"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1" );
if ($cookiefile && file_exists($cookiefile)) {
	curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile);
	curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiefile);
}
curl_setopt($ch, CURLOPT_ENCODING, 1);
$ret = curl_exec($ch);
return $ret;
}

echo curl_it('https://www.site.com','','GET', array(), 'cookie');


Вообщем делаю запрос на сайт и получаю ответ.

Please enable cookies.
Error 1010 Ray ID: 15b0c8f3b8270c15

Access denied

What happened?

The owner of this website (www.site.com) has banned your access based on your browser's signature (15b0c8f3b8270c15-mh5).

CloudFlare Ray ID: 15b0c8f3b8270c15 • Your IP: 91.206.900.99 • Help • Performance & security by CloudFlare


Раньше работало, сейчас забанили.
Меняю CURLOPT_USERAGENT, не помогает, но почему?
Скрипт выполняет чужой сервер.
  • Вопрос задан
  • 4697 просмотров
Пригласить эксперта
Ответы на вопрос 3
@kloptop
проггер
Столкнулся с такой же проблемой. Нашёл решение:
curl 'https://site.com/' \
-H 'Host: site.com' \
-H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:33.0) Gecko/20100101 Firefox/33.0' \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Accept-Language: en-US,en;q=0.5' \
-H 'Referer: site.com' \
-H 'Cookie: all required cookies will appear here' \
-H 'Connection: keep-alive'


Адаптировал под Python:
self.c.setopt(pycurl.HTTPHEADER,
                      [
                          'Host: site.com',
                          'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:33.0) Gecko/20100101 Firefox/33.0',
                          'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
                          'Accept-Language: en-US,en;q=0.5',
                          'Referer: https://site.com',
                          # 'Cookie: all required cookies will appear here',
                          'Connection: keep-alive',
                          'Content-Type: application/x-www-form-urlencoded; charset=UTF-8'])


Под свой язык уже сами адаптируйте. Все эти заголовки должны быть указаны.
Ответ написан
Комментировать
mrsombre
@mrsombre
Веб-программист
Вероятно signature - это что-то вроде типичного поведения данных браузеров. Туда, например, может входить определенный набор http-заголов (Accept, Accept-Encoding и т.д.). Может быть и более комплексная логика. То есть cloudflare определил, что ваш запрос идет от бота, представляющегося обычным браузером, а такое поведение заблокировано владельцем сайта.
Ответ написан
Комментировать
@Mikhail-M
Openssl сильно палится подмешивая псевдошифр tls_empty_renegotiation_info_scsv в набор шифров при хендшейке. Советую пересобрать openssl на другой бекенд, например на windows sspi, если речь идет о windows-платформе. Так же стоит рандомизировать шифры при запросах, чтобы не создавать одинаковые хендшейки с одного айпи
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы