web-dev-qa-db-fra.com

PHP cURL comment ajouter la valeur de l'agent utilisateur OR surmonter les serveurs bloquant les demandes cURL?

Je transfère un tableau d'objets. J'ai un client cURL (émetteur) sur son propre serveur et un script d'écoute sur l'autre serveur , lequel n'est pas sous mon contrôle. Ensuite, je pense que là-bas, ils bloquent les demandes de cURL entrantes parce que, lorsque je teste avec le code HTML normal <form>, il fonctionne. Mais pas via cURL quand même.

Donc, je pense qu'ils ont fait certaines restrictions à cURL.

Ensuite, mes questions sont les suivantes:

  1. Un serveur peut-il restreindre/bloquer les demandes entrantes cURL?
  2. Si oui, puis-je tromper/changer l'en-tête HTTP (Agent utilisateur) dans mon script d'initiation cURL?
  3. Ou y a-t-il d'autres histoires possibles?

Merci!

13
夏期劇場
  1. Du côté du serveur, nous pouvons bloquer certaines requêtes en reconnaissant les champs d’en-tête (y compris référence, cookie, agent utilisateur, etc.) dans la requête http, adresse ip, fréquence d’accès. Et dans la plupart des cas, les requêtes générées par la machine ont généralement une nature différente de celle des requêtes humaines. Par exemple, aucun cookie ni référence, ou avec une fréquence d'accès plus élevée, nous pouvons écrire des règles pour refuser ces requêtes.

  2. Selon 1, vous pouvez essayer de votre mieux pour simuler des demandes réelles en remplissant les champs d'en-tête, en utilisant une fréquence aléatoire et inférieure, en utilisant davantage d'adresses IP. (sonne comme une attaque)

  3. Généralement, en utilisant des fréquences plus basses et sans surcharger leur serveur, suivez leurs règles d'accès, ils bloqueront rarement vos requêtes. 

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

SI vous faites toujours face au problème, procédez comme suit.

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

REMARQUE: Vous avez besoin d’un dossier COOKIES dans le répertoire.

3.

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

Si cela ne résout pas le problème, donnez l’échantillon Entrée/Sortie/Erreur/etc. .. Ainsi, une solution plus précise peut être fournie.

20
Black0CodeR

Le serveur ne peut pas bloquer uniquement les requêtes cURL car il ne s'agit que de requêtes HTTP. Ainsi, le changement d’agent d’utilisateur de votre cURL peut résoudre votre problème, car le serveur pensera que vous vous connectez via le navigateur présenté dans UA.

0
AxelPAL