我不使用javascript,所以我对它完全陌生。
我有一个link我希望按POST请求登录。只需发送带有预定义正确登录名和密码的POST请求,然后在下一页上获取数据。
我在Chrome中使用开发者模式查看浏览器发送的请求。 但是当我输入用户名和密码的正确组合时,我看不到单个POST请求,只有GET。
如果用户名和密码不正确,我可以看到包含以下表单数据值的POST请求:
xjxfun:_validateLogin
xjxr:1389197444586
xjxargs[]:<xjxobj>
<e><k>Username</k><v>SmyUsername</v></e>
<e><k>Password</k><v>SmyPassword</v></e>
<e><k>Autologin</k><v>S1</v></e>
<e><k>REFERER</k><v>Sdailyfield</v></e>
</xjxobj>
我在myUsername
输入用户名,为{strong>密码输入myPassword
。
我需要向此服务器发送什么POST请求来模仿表单填写和提交?
感谢您的回答。您可以给出的最佳答案是使用必要的数据/标头/值描述POST请求,以便我可以在浏览器的某个REST客户端中快速证明它
答案 0 :(得分:1)
以下是我从有效登录信息发送的数据:
xjxfun:_validateLogin
xjxr:1389422948740
xjxargs[]:<xjxobj><e><k>Username</k><v>S<![CDATA[myemailhere]]></v></e><e><k>Password</k><v>Smypasswordhere</v></e><e><k>Autologin</k><v>S1</v></e><e><k>REFERER</k><v>Sdailyfield</v></e></xjxobj>
这就是我的回报:
<?xml version="1.0" encoding="utf-8" ?><xjx><cmd cmd="js">Slocation.href = 'sudoku_des_tages.htm';</cmd></xjx>
顺便说一下,这是一个POST请求。
我认为您只能看到GET请求的原因是因为服务器端的HTTP重定向带有您的身份验证详细信息,并且该请求(与所有页面请求一样)是GET请求,这可能是为什么您只能通过成功验证才能看到GET请求。
更新:根据我的理解,您将值作为标题值发送(换句话说,与Content-Type
一起),同时您应该在post formdata中发送它们。这就是你找到答案的原因。
答案 1 :(得分:0)
您可以随时使用CURL:
$fields_string = '';
$url = "yourProceesfileURL";
$userdata = array(
'email' => youremail,
'password' => yourpassword
);
foreach ($userdata as $key => $value) {
$fields_string .= $key . '=' . $value . '&';
}
rtrim($fields_string, '&');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, count($userdata));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
$result = curl_exec($ch);
curl_close($ch);
:)
答案 2 :(得分:0)
注意:当问题用JavaScript和PHP标记且没有Objective-C时,建议使用此解决方案。
您可以使用JQuery来模拟表单填充:
$(function(){
$('#Username').val('MyUsername');
$('#Password').val('MyPassword');
$('input[type=submit]').trigger("click");
});
<强> Working example here 强>
首先,您要通过获取带有id的input元素然后设置其值来设置值。完成更新所有请求的值后,只需触发提交按钮。
这将模拟您填写表单并提交。要自动执行此操作,我将使用PHP获取页面内容,然后触发JQuery函数:
echo file_get_contents("http://www.sudoku-knacker.de/anmeldung.htm?ref=dailyfield");