xISRAPILx
@xISRAPILx
Кратко не получится

Как заставить сервер думать, что я не робот?

Привет, мир.

Пытаюсь спарсить ресурс, но он этому противится. Через раз думает, что я робот. Взял все хэдеры из браузера - не помогло. Из браузера всё работает, даже если бесконечно спамить, а тут даже с задержкой не хочет.

Сам код:
/**
     * get запрос на внешний ресурс
     *
     * @param string $url Ссылка на ресурс
     * @param array $headers Дополнительные заголовки запроса
     *
     * @return bool|string false в случае ошибки или текст ответа от ресурса
     */
    public static function get(string $url, array $headers = []){
        $ch = curl_init();

        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_COOKIEJAR, __DIR__.DIRECTORY_SEPARATOR."cook.txt");
        curl_setopt($ch, CURLOPT_COOKIEFILE, __DIR__.DIRECTORY_SEPARATOR."cook.txt");

        curl_setopt($ch, CURLOPT_COOKIESESSION, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, [
                "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: ru,en;q=0.9",
                "cache-control: max-age=0",
                "upgrade-insecure-requests: 1",
                "user-agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 YaBrowser/19.6.1.153 Yowser/2.5 Safari/537.36"
            ] + $headers);
        curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 YaBrowser/19.6.1.153 Yowser/2.5 Safari/537.36");

        //curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

        $result = curl_exec($ch);
        if(($error = curl_error($ch))){
            echo "CUrl вернул ошибку: ".$error;
        }

        curl_close($ch);

        return $result;
    }


Сам ресурс:
https://www.copart.com/public/data/lotdetails/solr...
  • Вопрос задан
  • 454 просмотра
Пригласить эксперта
Ответы на вопрос 1
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
У cURL есть одна особенность, которая соответствует стандарту HTTP, но на ней то и ловят. Во время HTTP запроса cURL не использует полный URL (с именем сервера) в таком вот виде: "GET http ://site.org/path/file.ext?params HTTP/1.1". Вот по по этому "отсутствию полного URL" сервер и отлавливает.

Яндексовская капча так делает, при чём из 100-а запросов случайно срабатывало 2-3. Пришлось самостоятельно писать весь функционал cURL через fsockopen()/fread()/fwrite(), с подгрузкой/сохранением куков в файле cURL-а.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы