2009-12-18 8 views
4

Ceci est une question en deux parties.
Une requête HTTP basée sur cURL peut-elle imiter complètement une requête basée sur un navigateur?

Q1: peut demander à base cURL 100% imiter une demande basée sur un navigateur?

Q2: Si oui, quelles options doivent être définies. Si ce n'est pas ce que fait le navigateur qui ne peut pas être imité par cURL?

J'ai un site Web et je vois des milliers de demandes faites à partir d'une seule adresse IP en très peu de temps. Ces demandes récoltent toutes mes données. Lorsque vous regardez le journal pour identifier l'agent utilisé, cela ressemble à une requête du navigateur. Donc était curieux de savoir si c'est un bot et pas un utilisateur.

Merci à l'avance

+2

Oui, cURL peut 100% imiter une demande de navigateur. Pour voir quelles options définir, utilisez quelque chose comme wireshark pour voir comment votre navigateur communique via HTTP. –

Répondre

3

R1: Je suppose que, si vous définissez tous les en-têtes corrects, que, oui, une demande fondée curl-peut imiter un navigateur basé sur un: après tout, à la fois envoyer un HTTP demande, qui est juste quelques lignes de texte suivant une convention spécifique (à savoir la RFC HTTP)


R2: la meilleure façon de répondre à cette question est de jeter un oeil à ce qui envoie votre navigateur ; avec Firefox, par exemple, vous pouvez utiliser Firebug ou LiveHTTPHeaders pour l'obtenir.

Par exemple, pour obtenir cette page, Firefox envoyé ces en-têtes de demande:

GET /questions/1926876/can-a-curl-based-http-request-imitate-a-browser-based-request-completely HTTP/1.1 
Host: stackoverflow.com 
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.2b4) Gecko/20091124 Firefox/3.6b4 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3 
Accept-Encoding: gzip,deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive: 115 
Connection: keep-alive 
Referer: http://stackoverflow.com/questions/1926876/can-a-curl-based-http-request-imitate-a-browser-based-request-completely/1926889 
Cookie: ....... 
Cache-Control: max-age=0 

(I Just enlevé quelques informations - mais vous voyez l'idée ;-))

En utilisant curl, vous pouvez travailler avec curl_setopt pour définir les en-têtes HTTP; ici, vous auriez probablement utiliser une combinaison de CURLOPT_HTTPHEADER, CURLOPT_COOKIE, CURLOPT_USERAGENT ...

+0

super, j'ai eu un problème et j'ai découvert un paramètre "referer" manquant, mec tu me sauves la vie, si j'étais gay, j'ai sucé ta bite ^^ – Offboard