web-dev-qa-db-fra.com

Les serveurs peuvent-ils bloquer les requêtes curl?

Je travaille sur l'API ZOHO et j'essaie de mettre à jour l'enregistrement à l'aide de cURL. J'ai essayé différentes variations de cURL, mais il retourne toujours "faux". Mais quand j'appelle la même URL en utilisant un navigateur, cela fonctionne.

Est-il possible de bloquer les requêtes CURL? Existe-t-il un autre moyen d'appeler cette URL à l'aide d'un POST ou peut-être d'une requête GET?

Le code cURL que j'ai essayé est le suivant:

$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);
13
www.amitpatil.me

Les serveurs ne peuvent pas bloquer les requêtes cURL en tant que tels, mais ils peuvent bloquer toute requête qu'ils n'aiment pas. Si le serveur recherche certains paramètres auxquels votre demande cURL ne satisfait pas, il peut décider de répondre différemment.

Dans la grande majorité des cas, cette différence de comportement est déclenchée par la présence (ou l'absence) et les valeurs des en-têtes de requête HTTP. Par exemple, le serveur peut vérifier que l'en-tête User-Agent est présent et a une valeur valide (il peut également vérifier de nombreuses autres choses).

Pour savoir à quoi ressemble la requête HTTP provenant du navigateur, utilisez un proxy de débogage HTTP tel que Fiddler ou les outils de développement de votre navigateur.

Pour ajouter vos propres en-têtes à votre demande cURL, utilisez

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

De nombreux serveurs Web veulent bloquer les requêtes HTTP forgées par autre chose qu'un navigateur, afin d'éviter les abus des robots. Si vous voulez simuler/prétendre que votre requête provient d'un navigateur, vous devez au moins:

  1. Passez les mêmes en-têtes que vos navigateurs (utilisez ie Firebug pour les obtenir)

    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    
  2. Changer l'agent utilisateur (nom du navigateur)

    curl_setopt($ch, CURLOPT_USERAGENT, $agent);
    
  3. Activer les cookies (par exemple, redirection et gestion de session)

    curl_setopt ($ch, CURLOPT_COOKIEJAR, $file);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
    
  4. Ajouter des référents 

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

Et je vous prie de ne rien manquer! 

18
Tom Desp

Pour répondre à votre question "Est-il possible de bloquer les requêtes CURL?" : Oui, en fait, il est possible de détecter une requête cURL en lisant l'en-tête User-Agent.

Vous pouvez modifier l'agent utilisateur en appelant curl_setopt($ch, CURLOPT_USERAGENT, 'My user agent string!');.

5
Vitamin

Pour en dire un peu plus, vous pouvez utiliser le curl_setopt ($ ch, CURLOPT_USERAGENT, 'Mozilla/5.0'); ou quelque chose comme ça pour simuler l'agent utilisateur. Dans ce cas, le serveur penserait qu'un navigateur Firefox faisait la demande.

0
ashton gleason