2011-02-24 118 views
0

我试图通过PHP收集domme信息(NOTAM)上this form获取内容绕过的JavaScript重定向。如何通过PHP GET/POST

的问题是,网站使用JavaScript重定向处理POST请求的2倍(在link 1然后在形式地址(使用POST),然后将用户重定向到(使用GET)再次形成地址。

我使用Firefox Live HTTP Headers扩展来收集请求的日志,并试图欺骗发送的头文件(实质上是内容类型,Content-Length用于POST,甚至是非标准文件时的Accept和Referer)

我使用的是PHP的file_get_contents方法

这里是代码:

第一个请求(POST)

<?php 
// POST form fields definition 
$donnees = array(
'bResultat' => 'true', 
'bImpression' => '', 
'ModeAffichage' => 'COMPLET', 
'AERO_Date_DATE' => date("Y").'/'.date("m").'/'.date("d"), 
'AERO_Date_HEURE' => date("H").':'.((date("i")+10 >= 60) ? 60-date("i")+10 : date("i")+10), 
'AERO_Langue' => 'FR', 
'AERO_Duree' => '12', 
'AERO_CM_REGLE' => '1', 
'AERO_CM_GPS' => '2', 
'AERO_CM_INFO_COMP' => '1', 
'AERO_Tab_Aero[0]' => 'LFQQ', 
'AERO_Tab_Aero[1]' => '', 
'AERO_Tab_Aero[2]' => '', 
'AERO_Tab_Aero[3]' => '', 
'AERO_Tab_Aero[4]' => '', 
'AERO_Tab_Aero[5]' => '', 
'AERO_Tab_Aero[6]' => '', 
'AERO_Tab_Aero[7]' => '', 
'AERO_Tab_Aero[8]' => '', 
'AERO_Tab_Aero[9]' => '', 
'AERO_Tab_Aero[10]' => '', 
'AERO_Tab_Aero[11]' => '' 
); 


// Headers encoding function definition 
function http_build_headers($headers) { 

     $headers_brut = ''; 

     foreach($headers as $nom => $valeur) { 
       $headers_brut .= $nom . ': ' . $valeur . "\r\n"; 
     } 

     return $headers_brut; 
} 

// Raw request content creation 
$contenu = http_build_query($donnees); 
var_dump($contenu); 
echo "<br/>=============<br/>"; 

// Headers definition 
$headers = http_build_headers(
    array(
     'Referer' => 'http://notamweb.aviation-civile.gouv.fr/Script/IHM/Com_Chargement.php?URL=Bul_Aerodrome.php', 
     'Content-Type' => 'application/x-www-form-urlencoded', 
     'Content-Length' => strlen($contenu) 
    ) 
); 
echo strlen($contenu)."<br />=============<br/>"; 

// Context definition 
$options = array(
    'http' => array(
     'user_agent' => 'Mozilla/5.0 (Windows; U; Windows NT 6.1; fr; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13', 
     'method' => 'POST', 
     'content' => $contenu, 
     'header' => $headers 
    ) 
); 

// Context creation 
$contexte = stream_context_create($options); 

// Sends POST form 
$retour = file_get_contents('http://notamweb.aviation-civile.gouv.fr/Script/IHM/Bul_Aerodrome.php?AERO_Langue=FR', false, $contexte); 

第二个请求(GET)以下:

// Headers definition 
$headers = http_build_headers(
    array(
     'Accept' => 'text/css,*/*;q=0.1', 
     'Referer' => 'http://notamweb.aviation-civile.gouv.fr/Script/IHM/Bul_Aerodrome.php?AERO_Langue=FR' 
    ) 
); 

// Context definition 
$options = array(
    'http' => array(
     'user_agent' => 'Mozilla/5.0 (Windows; U; Windows NT 6.1; fr; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13', 
     'method' => 'GET', 
     'header' => $headers 
    ) 
); 

// Context creation 
$contexte = stream_context_create($options); 

// Sends GET request 
$retour = file_get_contents('http://notamweb.aviation-civile.gouv.fr/Script/IHM/Bul_Aerodrome.php?AERO_Langue=FR', false, $contexte); 

var_dump($retour); 
?> 

我想我的问题是显而易见的:怎么能PHP检测和管理这样的JavaScript重定向?有绕过他们的技巧吗?或者其他任何意思来实现它?

非常感谢

+0

你忘了写你的问题:) – 2011-02-24 11:29:14

+1

PHP无法解析法语对我的知识。 – Jason 2011-02-24 12:22:56

+0

问题补充! – 2011-02-25 13:49:14

回答

0

答案很简单:PHP无法检测和管理的JavaScript在所有重定向

您必须了解JavaScript在页面上做了些什么,然后编写一些'模拟'JavaScript会做什么的PHP代码(在您的案例中,“猜测”存在重定向并执行另一个file_get_contents())。