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

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

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

код cURL, который я пробовал, как показано ниже:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
$data = curl_exec($ch);
curl_close($ch);

4 ответов


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

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

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

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

curl_setopt($ch, CURLOPT_HTTPHEADER, array('HeaderName: HeaderValue'));

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

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

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

    curl_setopt($ch, CURLOPT_USERAGENT, $agent);
    
  3. включить cookies (например перенаправление и обработка сеанса)

    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);
    

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


чтобы ответить на ваш вопрос " есть ли способ заблокировать запросы CURL?": да, на самом деле можно обнаружить запрос cURL, прочитав .

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


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