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

Я работаю над ZOHO API и пытаюсь обновить запись с помощью CURL. Я пробовал разные варианты CURL, но всегда возвращает "false". Но когда я вызываю тот же URL-адрес с помощью браузера, он работает.
Есть ли способ блокировать запросы CURL? Есть ли другой способ, который я могу назвать этим URL-адресом с помощью POSt или может быть GET? Я провел почти 2-3 дня. Если вы являетесь пользователем ZOHO API, можете ли вы показать мне код, который сработал для вас?

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

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

Ответ 1

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

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

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

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

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

Ответ 2

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

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

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

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

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

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

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

Ответ 3

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

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