PHP cURL как добавить значение агента пользователя или преодолеть серверы, блокирующие запросы cURL?

Я передаю массив объектов. У меня есть cURL client (отправитель) на собственном сервере и прослушивание скрипта на чужом сервере, который не находится под моим контролем. Тогда я думаю, что они блокируют входящие запросы cURL потому что, когда я тестирую с обычным HTML <form>, это работает. Но не через завиток в любом случае.

поэтому я думаю, что они сделали некоторые ограничения для завивки.

тогда мои вопросы здесь являются:

  1. может ли сервер ограничить / заблокировать входящие запросы cURL?
  2. если да, могу ли я обмануть/изменить заголовок HTTP (User Agent) в моем инициирующем скрипте cURL?
  3. или есть другие возможные истории?

спасибо!

4 ответов


  1. на стороне сервера мы можем заблокировать некоторые запросы, распознав поля заголовка (включая refer, cookie, user-agent и т. д.) В http-запросе, ip-адресе, частоте доступа. И в большинстве случаев запросы, генерируемые машиной, обычно имеют что-то другое,чем человеческие запросы, например, no refer & cookie, или с более высокой частотой доступа мы можем написать некоторые правила для отказа в этих запросах.

  2. согласно 1, Вы можете попробовать все возможное, чтобы имитировать реальные запросы, заполняя поля заголовка, используя случайную и медленную частоту, используя больше ip-адресов. (звучит как атака)

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


  $agent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)';
  $curl=curl_init();
  curl_setopt($curl, CURLOPT_USERAGENT, $agent);

Если вы все еще сталкиваетесь с проблемой, то сделайте следующее.

1.

$config['useragent'] = 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0';

curl_setopt($curl, CURLOPT_USERAGENT, $config['useragent']);
curl_setopt($curl, CURLOPT_REFERER, 'https://www.domain.com/');

2.

$dir                   = dirname(__FILE__);
$config['cookie_file'] = $dir . '/cookies/' . md5($_SERVER['REMOTE_ADDR']) . '.txt';

curl_setopt($curl, CURLOPT_COOKIEFILE, $config['cookie_file']);
curl_setopt($curl, CURLOPT_COOKIEJAR, $config['cookie_file']);

Примечание: вам нужна папка COOKIES в каталоге.

3.

curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

Если это не решит проблему, то дайте образец ввода / вывода / ошибки / и т. д. Таким образом, можно обеспечить более точное решение.


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