Могут ли серверы блокировать запросы curl?

StackOverflow https://stackoverflow.com/questions/9391137

  •  29-10-2019
  •  | 
  •  

Вопрос

Я работаю над ZOHO API и пытаюсь обновить запись с помощью cURL.Я пробовал разные варианты cURL, но он всегда возвращает false.Но когда я вызываю тот же URL-адрес в браузере, он работает.

Есть ли способ заблокировать запросы cURL?Есть ли другой способ вызвать этот URL-адрес с помощью POST или, возможно, запроса GET?

Код cURL, который я пробовал, выглядит следующим образом:

родовое слово
Это было полезно?

Решение

Серверы не могут блокировать запросы cURL как таковые, но они могут блокировать любой запрос, который им не нравится.Если сервер проверяет некоторые параметры, которым ваш запрос cURL не удовлетворяет, он может решить ответить по-другому.

В подавляющем большинстве случаев это различие в поведении вызвано наличием (или отсутствием) и значениями заголовков HTTP-запроса.Например, сервер может проверить, присутствует ли заголовок User-Agent и имеет ли оно допустимое значение (он также может проверять множество других вещей).

Чтобы узнать, как выглядит HTTP-запрос, исходящий из браузера, используйте прокси-сервер отладки HTTP, например Fiddler .или инструменты разработчика вашего браузера.

Чтобы добавить собственные заголовки в запрос cURL, используйте

родовое слово

Другие советы

Многие веб-серверы хотят блокировать HTTP-запросы, созданные чем-то другим, кроме браузера, чтобы предотвратить злоупотребления ботов. Если вы хотите имитировать / симулировать свой запрос из браузера, вам, по крайней мере, необходимо:

  1. Передайте те же заголовки, что и в ваших браузерах (например, используйте Firebug , чтобы их получить)

    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    
  2. Изменить пользовательский агент (имя браузера)

    curl_setopt($ch, CURLOPT_USERAGENT, $agent);
    
  3. Включить файлы cookie (например, для перенаправления и обработки сеанса)

    curl_setopt ($ch, CURLOPT_COOKIEJAR, $file);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
    
  4. Добавить рефералов

    curl_setopt($curl, CURLOPT_REFERER, 'http://www.google.com');
    curl_setopt($curl, CURLOPT_AUTOREFERER, true);
    

И молитесь, чтобы вы ничего не пропустили!

Чтобы ответить на ваш вопрос «Есть ли способ блокировать запросы скручиваемостью?» : Да, на самом деле можно обнаружить запрос скручиваемости, прочитав заголовок User-Agent.

Вы можете изменить пользовательский агент, вызывая curl_setopt($ch, CURLOPT_USERAGENT, 'My user agent string!');.

Чтобы подробнее остановиться на этом, вы можете использовать curl_setopt ($ ch, CURLOPT_USERAGENT, 'Mozilla / 5.0');или что-то в этом роде, чтобы подделать пользовательский агент.В этом случае сервер будет думать, что браузер Firefox делает запрос.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top