[PHP] Envoyer et recevoir des requêtes HTTP

Résolu
KunGu Messages postés 1169 Date d'inscription   Statut Membre Dernière intervention   -  
KunGu Messages postés 1169 Date d'inscription   Statut Membre Dernière intervention   -
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 !


A voir également:

4 réponses

Profil bloqué
 
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'.
0
KunGu Messages postés 1169 Date d'inscription   Statut Membre Dernière intervention   224
 
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 ?
0
Profil bloqué
 
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);
0
KunGu Messages postés 1169 Date d'inscription   Statut Membre Dernière intervention   224
 
Mon dieu merci beaucoup j'aurais jamais pensé à ça et CA MARCHE !

Merci !!
0