我试图通过PHP收集此表单上的domme信息(NOTAM)。
问题是,网站使用JavaScript重定向2次处理POST请求(在链接1上然后在表单地址上使用POST),然后再重定向用户到表单地址(使用GET)。
我使用扩展来收集请求的日志,并试图欺骗发送的标头(实质上是内容类型、POST的内容长度,甚至接受和引用非标准的标题)。
我使用的是PHP方法。
以下是代码:
第一次请求(员额)
<?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重定向?有什么办法绕过他们吗?或者其他什么方法来达到这个目标?
非常感谢
发布于 2011-11-18 08:56:54
答案很简单: Php无法检测和管理JavaScript重定向的所有。
您必须了解JavaScript在页面上所做的事情,并编写一些‘模拟’JavaScript会做什么的Php代码(在您的例子中,“猜测”有一个重定向并执行另一个file_get_contents())。
https://stackoverflow.com/questions/5103951
复制相似问题