HTTP POST和RESPONSE特定案例研究

时间:2011-11-03 15:56:13

标签: android http http-post response httpresponse

  1. 网站:http://na.leagueoflegends.com/ladders/solo-5x5
  2. 搜索玩家(例如:Jaiybe)
  3. 您被重定向(在本例中为:http://na.leagueoflegends.com/ladders/solo-5x5?highlight=28&page=1
  4. 阅读内容
  5. 我想在java / android中做到这一点。

    1. 我在搜索时分析了网站的POST请求,结果:

      • op:搜索
      • 选手:Jaiybe
      • ladder_id:3
      • form_build_id:form-fff5e6e2569f1e15e5a5caf2a61c15e2
      • form_id:ladders_filter_form
    2. 构建一个简单的HTTP POST混合,让我们阅读内容......

    3. 代码:

      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中设置它?

1 个答案:

答案 0 :(得分:1)

form_build_id:form-fff5e6e2569f1e15e5a5caf2a61c15e2

这是一个自动生成的令牌,在某段时间内有效。这可能是您的问题的根源以及令牌首先存在的原因(以防止发布垃圾邮件)。

由于此令牌似乎不基于会话,因此您实际上可以在生成表单的页面上使用HTTP Get,并在每次为HTTP Post分析生成的令牌。

关于操作系统检测,浏览器通常使用HTTP User-Agent标题提供有关操作系统的信息。