2010-10-30 27 views
0

Je voudrais étudier comment les en-têtes sont envoyés et reçus.Comment envoyer et recevoir des en-têtes via PHP

Je connais la fonction header de PHP et pense que je peux juste regarder un en-tête de demande réel (par exemple en utilisant Firebug) et faire des demandes identiques à un serveur (y compris spoofing l'utilisateur-agent). Est-ce correct?

L'autre problème est de savoir comment récupérer les réponses d'en-tête? Je veux analyser la réponse.

Merci.

EDIT:

@Tatu, voici le code que je courais:

$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL, "http://www.google.com/"); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/540.0 (KHTML, like Gecko) Ubuntu/10.10 Chrome/8.1.0.0 Safari/540.0'); 

$result = curl_exec($ch); 
curl_close($ch); 

header('Content-type: text/plain'); 
echo($result); 

Répondre

3

Vous pouvez jeter un oeil à cURL qui vous permettra d'effectuer des requêtes et régler et contrôler les en-têtes. PHP header seulement définit les en-têtes pour la page en cours, vous ne pouvez pas utiliser cela pour usurper votre agent utilisateur – ce sont des en-têtes définis par le serveur et en tant que tels n'ont pas une telle importance.

La structure de base d'une demande cURL avec en-têtes personnalisés pourrait être quelque chose comme ceci:

$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL, "http://www.example.com/"); 
curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_USERAGENT, "Your user agent"); 

$result = curl_exec($ch); 
curl_close($ch); 

Le début de $result contiendra maintenant les en-têtes reçus du serveur.

+0

Juste pour clarifier, je peux User-Agent "spoof" en utilisant cURL, non? Je veux juste voir comment les serveurs répondent aux différents agents utilisateurs. – StackOverflowNewbie

+0

J'ai essayé votre code, mais je n'ai pas obtenu d'en-têtes (j'ai eu la réponse réelle du fichier, cependant). Je suis en train d'éditer mon article original pour que je puisse vous montrer mon code. – StackOverflowNewbie

+0

@StackOverflowNewbie, vous devez avoir 'CURLOPT_HEADER' mis à 1 que j'ai accidentellement eu 0 dans mon exemple. –

1

Si vous souhaitez vous-même envoyer des en-têtes, sans utiliser cURL, consultez les sockets en PHP.

http://php.net/sockets

+0

Après avoir obtenu votre diplôme de cURL, les prises vous offrent une puissance incroyable. Mais vous pouvez toujours faire presque n'importe quoi avec cURL. – Xeoncross

+0

Oui, cURL fournit une meilleure interface, mais rien ne vaut les connexions crues :-) – Nasir