Прошу оставить моральную сторону вопроса вне обсуждения.
Оох, что я уже только не пробовал. Работало отлично, и в определённый момент просто перестало.
Допустим, есть запрос:
https://www.google.ru/search?q=%D0%BF%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5+%D1%81%D0%B0%D0%B9%D1%82%D0%BE%D0%B2&num=100
И есть код:
$useragent = $this->getUseragent();
$curl = curl_init();
$headers = array();
$headers[] = "Connection:keep-alive";
$headers[] = "Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
$headers[] = "Connection:keep-alive";
$headers[] = "Upgrade-Insecure-Requests:1";
$headers[] = "User-Agent:".$useragent;
$headers[] = "Accept-Language:ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4";
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_USERAGENT, $useragent);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
$response = curl_exec($curl);
Тестирую с локальной машины. Curl запрос получает ошибку 403 и страничку с баном.
Тут же я этот запрос открываю в своём браузере в режиме инкогнито - и сразу же получаю код 200.
Я ведь правильно понимаю, в режиме инкогнито при первом запросе нет совершенно никаких cookie, то есть google ориентируется только на request headers.
Что я делаю не так? Все заголовки в массив $headers скопировал с браузера.
Видимо есть ещё какой-то параметр, который я не передаю.
Есть идеи?
UPD: Появилось вот такое предположение:
Гугл банит как пользователей с определёнными куки, так и пользователей без куки.
Если это так, значит вероятней всего можно обойти блокировку, постоянно собирая "работающие" куки