[PHP] Envoyer et recevoir des requêtes HTTP [Résolu/Fermé]

Signaler
Messages postés
1192
Date d'inscription
vendredi 7 septembre 2007
Statut
Membre
Dernière intervention
17 mars 2013
-
KunGu
Messages postés
1192
Date d'inscription
vendredi 7 septembre 2007
Statut
Membre
Dernière intervention
17 mars 2013
-
Bonjour à tous,

J'ai besoin pour mon projet d'envoyer une en tête d'une requête GET à un serveur web, et j'ai besoin d'avoir sa réponse, ainsi que la page web qu'il est censé renvoyer.

Je m'explique :

J'envoie une requête du type :
GET / HTTP/1.1
Host: www.exemple.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.24
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Encoding: gzip,deflate,sdch
Accept-Language: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

en PHP ça me donne ça :
<?php
	$fp = fsockopen("www.exemple", 80, $errno, $errstr, 30);
	if (!$fp) 
	{
		echo "$errstr ($errno)<br />\n";
	} 
		else 
		{
			$out = "GET / HTTP/1.1\r\n";
			$out .= "Host: www.exemple.com\r\n";
			$out .= "Connection: keep-alive\r\n";
			$out .= "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.24\r\n";
			$out .= "Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n";
			$out .= "Accept-Encoding: gzip,deflate,sdch\r\n";
			$out .= "Accept-Language: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4\r\n";
			$out .= "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3\r\n";
	
	
			fwrite($fp, $out);
			while (!feof($fp)) 
				{
				echo fgets($fp);
				}


			
			fclose($fp);
		}
?>



Seulement je récupère via fgets l'en tête de ce que m'envoie le serveur mais après une partie incompréhensible de données. Mon but étant de récupérer la page web qu'est censée afficher un navigateur, je ne sais pas si "cette partie incompréhensible de données" est cette page web "cryptée" ou si je n'ai simplement pas récupéré cette page web avec ce code.

Pouvez-vous m'éclairer ?
Merci !


4 réponses


Bonjour,

d'après la description, je pencherais plutôt vers la compression que le cryptage. Pour en être sur, il suffit de supprimer la ligne
$out .= "Accept-Encoding: gzip,deflate,sdch\r\n";

En clair, on demande au serveur de nous envoyer le texte compressé avec gzip. Sans cette ligne dans la commande GET, le code HTML est envoyé 'en clair'.
Messages postés
1192
Date d'inscription
vendredi 7 septembre 2007
Statut
Membre
Dernière intervention
17 mars 2013
208
Merci pour la réponse,
En effet en supprimant cette ligne j'arrive a avoir du code HTML en clair :)
Mais je n'ai pas tout, je vois sur ma page s'afficher seulement une partie de la page web que je veux récupérer ...

J'ai essayé de modifier un peu mon code au niveau du while pour qu'a lieu de m'afficher la page qu'il l'écrive dans un fichiers, seulement là je tombe sur un truc encore pire, un code tronqué complètement avec des balises à moitié fermées...
Voici mon code modifié :
<?php
	$fp = fsockopen("www.exemple", 80, $errno, $errstr, 30);
	if (!$fp) 
	{
		echo "$errstr ($errno)<br />\n";
	} 
		else 
		{
			$out = "GET / HTTP/1.1\r\n";
			$out .= "Host: www.exemple.com\r\n";
			$out .= "Connection: keep-alive\r\n";
			$out .= "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.24\r\n";
			$out .= "Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n";
			$out .= "Accept-Language: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4\r\n";
			$out .= "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3\r\n";
	
	
			fwrite($fp, $out);
			while (!feof($fp)) 
				{
				$data = fgets($fp);
				$ft = fopen ("test.txt", "r+");
				fputs ($ft, $data);
				fclose ($ft);
				}


			
			fclose($fp);
		}
?>


Pourrais-je avoir la page web complète ?

Passe plutot par la mémoire et un tampon, c'est plus rapide et plus sur
$buf="";
while (!feof($fp)) {
$buf.= fgets($fp, 128);
}

puis

$ft = fopen ("test.txt", "r+");
fputs ($ft, $buf);
fclose ($ft);
Messages postés
1192
Date d'inscription
vendredi 7 septembre 2007
Statut
Membre
Dernière intervention
17 mars 2013
208
Mon dieu merci beaucoup j'aurais jamais pensé à ça et CA MARCHE !

Merci !!