带有填充表单值的POST请求以登录

时间:2014-01-08 16:21:53

标签: http login http-headers

我不使用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客户端中快速证明它

3 个答案:

答案 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");