Bonjour à tous,

Voici ce que j'essaye de réaliser sans succès :

récupérer le contenu d'une page web via fsockopen qui est le résultat d'une validation d'un formulaire de recherche.

Voici le code utilisé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
 
		if (strtoupper(substr($url,0,7))=="HTTP://") $url=substr($url,7);
		$p = strpos($url,"/");
		if ($p===FALSE) {
			$nom_domaine=$url;
			$get="/";
		}
		else {
			$nom_domaine=substr($url,0,$p);
			$get=substr($url,$p);
		}	
 
		$errno=""; $errstr=""; $r="";
		$fp = fsockopen($nom_domaine, 80, $errno, $errstr, 15);
		if($fp) {
			socket_set_timeout($fp, 15);
			fputs($fp,"GET $get HTTP/1.1\r\n");
                        fputs($fp,"Host:  $nom_domaine\r\n");
                        fputs($fp,"Connection: Close\r\n\r\n");
			$r="";
			while(!feof($fp)) {
				$r.=fgets($fp,1024);
			}
			fclose($fp);
			return($r);
		}
		return('');
Ce code me retourne bien un contenu HTML mais surtout une erreur 404, car la validation du formulaire n'est plus valide.

Réflexion : à la validation du formulaire des cookie sont créés et identifiés que je nommerai par la suite cook1 et cook2. Ces valeurs sont connues.

Voici donc le nouveau code utilisé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
 
 
		if (strtoupper(substr($url,0,7))=="HTTP://") $url=substr($url,7);
		$p = strpos($url,"/");
		if ($p===FALSE) {
			$nom_domaine=$url;
			$get="/";
		}
		else {
			$nom_domaine=substr($url,0,$p);
			$get=substr($url,$p);
		}
 
		$cookie_str = ''; 
		$cookie = array();
		$cookie["cook1"] ="val1";
		$cookie["cook2"] = "val2" ;
 
		foreach ($cookie as $k => $v) {	
			$cookie_str .= urlencode($k) .'='. urlencode($v) .'; '; 
		}
 
		$verb = "GET";
		$uri = '/';
		$getdata_str = "";
 
		$crlf = "\r\n"; 
		$req = $verb .' '. $uri . $getdata_str .' HTTP/1.1' . $crlf; 
		$req .= 'Host: '. $nom_domaine . $crlf; 
		$req .= 'User-Agent: '.$parametres['BrowserName']. $crlf; 
 
		if (!empty($cookie_str)) 
                        $req .= 'Cookie: '. substr($cookie_str, 0, -2) . $crlf; 
 
 
		$errno=""; $errstr=""; $r="";
		$fp = fsockopen($nom_domaine, 80, $errno, $errstr, 15);
		if($fp) {
			socket_set_timeout($fp, 15);
			fputs($fp,$req);
			$r="";
			while(!feof($fp)) {
				$r.=fgets($fp,1024);
			}
			fclose($fp);
			return($r);
		}
		return('');
A la fin de l'execution, plusieurs constats :
  • execution bien plus longue que le précédent code
  • message de délais d'execution "Fatal error: Maximum execution time of 30 seconds exceeded" à la ligne "$r.=fgets($fp,1024);"
  • aucun contenu HTML retourné


req constituée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
GET / HTTP/1.1 Host: intranet.societe.fr User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16 Cookie: cook1=val1; cook2=val2
Je n'ai pas d'autres pistes de reflexion pour le moment, est ce que quelqu'un aurait déjà réalisé ce genre de travaux pour automatiser une reprise de données ? Merci de votre aide !