我想以编程方式(使用 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));
...
我需要 post 请求的 url。我怎样才能得到它?
最佳答案
您需要检查网站的源代码,特别是登录表单,并查看它发送的数据。看<form action="url_here" ...>
在您的示例站点中,此 URL 为 http://mediaforest-argentina.com/Membership/login.aspx?ReturnUrl=%2fGuests%2fRealtimeCharts.aspx但请注意,在很多情况下(本示例也不异常(exception)),存在隐藏的表单元素,其中包含您需要随请求发送的数据。 快速浏览一下就会发现许多隐藏的表单元素:
<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 可能会对值进行一些调整。因此,我建议您使用浏览器中的开发工具(Firebug 对于 Firefox,Chrome Development Tools 对于 Chrome 等)捕获完整请求,并以此为基础编写登录脚本。
我知道这听起来很复杂,但原因是,除非网站所有者提供公共(public) API,否则他/她可能不希望您以这种方式登录。
关于java - 从网页获取登录帖子请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11766584/