我想在java / android中做到这一点。
我在搜索时分析了网站的POST请求,结果:
构建一个简单的HTTP POST混合,让我们阅读内容......
代码:
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://na.leagueoflegends.com/ladders/solo-5x5");
// Add your POST METHOD attributes
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("op", "Search"));
nameValuePairs.add(new BasicNameValuePair("player", Jaiybe));
nameValuePairs.add(new BasicNameValuePair("ladder_id", "3"));
nameValuePairs.add(new BasicNameValuePair("form_build_id","form-daca6fff89cedc352ccc3f533afa3804"));
nameValuePairs.add(new BasicNameValuePair("form_id","ladders_filter_form"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
responseBody = EntityUtils.toString(response.getEntity());
return responseBody;
当我运行它时 - 我会得到某种离线页面......
数字form_build_id - 不断变化,但这没有问题,仍然使用相同的,并且如果我想“测试”如果这可能是问题,我不知道我将如何...
或者:还有其他 - 快速 - 如何获得相同的结果?
奇怪的是,我在android上获得的“错误”网站源代码是不同的,就好像我在我的PC(Win7,Eclipse,Java)或我的浏览器上运行相同。好像有两个版本的离线网站 - 移动版和PC版 - 但我的问题是:服务器如何知道代码在Android设备上运行?有没有办法在HttpClient中设置它?
答案 0 :(得分:1)
form_build_id:form-fff5e6e2569f1e15e5a5caf2a61c15e2
这是一个自动生成的令牌,在某段时间内有效。这可能是您的问题的根源以及令牌首先存在的原因(以防止发布垃圾邮件)。
由于此令牌似乎不基于会话,因此您实际上可以在生成表单的页面上使用HTTP Get,并在每次为HTTP Post分析生成的令牌。
关于操作系统检测,浏览器通常使用HTTP User-Agent
标题提供有关操作系统的信息。