从网页获取登录发布请求

时间:2012-08-01 19:53:39

标签: java html login

我想以编程方式(使用java)登录网站。

(已有用户名和密码)

以此网站为例: http://mediaforest-argentina.com/Membership/login.aspx?ReturnUrl=%2fGuests%2fRealtimeCharts.aspx

代码如下:

...
HttpPost httpost = new HttpPost("The url that I need");
List <NameValuePair> nvps = new ArrayList <NameValuePair>();
nvps.add(new BasicNameValuePair("IDToken1", "username"));
nvps.add(new BasicNameValuePair("IDToken2", "password"));
httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
...

我需要帖子请求的网址。我怎么能得到它?

2 个答案:

答案 0 :(得分:2)

您需要检查网站的源代码,特别是登录表单,并查看它发送的数据。看看<form action="url_here" ...>

在您的示例网站中,此网址为http://mediaforest-argentina.com/Membership/login.aspx?ReturnUrl=%2fGuests%2fRealtimeCharts.aspx,但请注意,在很多情况下,此示例也不例外,因此您需要随请求一起发送包含数据的隐藏表单元素。 快速浏览揭示了许多隐藏的表单元素:

<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="">
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTEyOTA2MDE5Ng9kFgJmD2QWAgIBD2QWAgIBD2QWAgIED2QWAgIBD2QWAmYPZBYCAg8PEA8WAh4HQ2hlY2tlZGhkZGRkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYCBStjdGwwMCRDb250ZW50UGxhY2VIb2xkZXIxJExvZ2luMSRSZW1lbWJlck1lBTJjdGwwMCRDb250ZW50UGxhY2VIb2xkZXIxJExvZ2luMSRBZ3JlZVRlcm1zT2ZVc2FnZQ==">
<input type="hidden" name="__PREVIOUSPAGE" id="__PREVIOUSPAGE" value="HJPLOnv9G-WzfNEMvvC92zihg9ivnWKp_vC_6zv73e3_sOtSB4IhbCtPk3C75el4TZvgalSI2OHCaVGPxWZzWwUGXqo1">
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWCQKP7Ne4AgK/1YTzDQLu8I/0DgKh+7V7Ao+F8Z4OAsz3upgFAueno7sBAs/QlOcIAozNmZwP">

可能会有更多,但我并没有真正寻找多久。另请注意,在发布表单之前,可能会对javascript所执行的值进行一些调整。出于这个原因,我建议您使用浏览器中的开发工具(Firefox Firebug,Chrome等{3}})捕获完整请求,并在此基础上创建登录脚本。

我知道这听起来很复杂,但原因是,除非网站所有者提供公共API,否则他可能不希望您以这种方式登录。

答案 1 :(得分:0)

使用像firebug这样的Chrome开发人员工具,您将能够看到尝试登录时发送的请求。这实际上是您刚发布的网址:http://mediaforest-argentina.com/Membership/login.aspx?ReturnUrl=%2fGuests%2fRealtimeCharts.aspx