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é :
Ce code me retourne bien un contenu HTML mais surtout une erreur 404, car la validation du formulaire n'est plus valide.
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('');
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é :
A la fin de l'execution, plusieurs constats :
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('');
- 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 :
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 !
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
Partager