1

我想以编程方式(使用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));
...

我需要发布请求的网址。我怎么才能得到它?

4

2 回答 2

2

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

在您的示例站点中,此 URL 为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 的Chrome 开发工具等)捕获完整的请求,并以此为基础创建登录脚本。

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

于 2012-08-01T19:56:49.547 回答
0

使用诸如 firebug 或 chrome 开发工具之类的工具,您将能够看到尝试登录时发送的请求。这实际上是您刚刚发布的 URL: http://mediaforest-argentina.com/Membership/login.aspx?ReturnUrl= %2fGuests%2fRealtimeCharts.aspx

于 2012-08-01T20:03:39.183 回答