PHP cURL как добавить значение агента пользователя или преодолеть серверы, блокирующие запросы cURL?
Я передаю массив объектов. У меня есть cURL client (отправитель) на собственном сервере и прослушивание скрипта на чужом сервере, который не находится под моим контролем. Тогда я думаю, что они блокируют входящие запросы cURL потому что, когда я тестирую с обычным HTML <form>
, это работает. Но не через завиток в любом случае.
поэтому я думаю, что они сделали некоторые ограничения для завивки.
тогда мои вопросы здесь являются:
- может ли сервер ограничить / заблокировать входящие запросы cURL?
- если да, могу ли я обмануть/изменить заголовок HTTP (User Agent) в моем инициирующем скрипте cURL?
- или есть другие возможные истории?
спасибо!
4 ответов
на стороне сервера мы можем заблокировать некоторые запросы, распознав поля заголовка (включая refer, cookie, user-agent и т. д.) В http-запросе, ip-адресе, частоте доступа. И в большинстве случаев запросы, генерируемые машиной, обычно имеют что-то другое,чем человеческие запросы, например, no refer & cookie, или с более высокой частотой доступа мы можем написать некоторые правила для отказа в этих запросах.
согласно 1, Вы можете попробовать все возможное, чтобы имитировать реальные запросы, заполняя поля заголовка, используя случайную и медленную частоту, используя больше ip-адресов. (звучит как атака)
вообще, используя более низкую частоту и не делайте тяжелую нагрузку для своего сервера, следуйте их правилам доступа, они редко будут блокировать ваши запросы.
$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.