【问题标题】:Java HttpClient get response from Post methodJava HttpClient 从 Post 方法获取响应
【发布时间】:2014-10-08 14:42:42
【问题描述】:

我是 HttpClient 的新手,我正在尝试获取 FIFA Ultimate Team Web 应用程序中玩家的价格。

使用开发者工具,我设法找到了产生播放器价格的发布方法。

搜索特定播放器会给出以下 URL 请求。 https://utas.s2.fut.ea.com/ut/game/fifa15/transfermarket?maskedDefId=20801&start=0&num=16&type=player

当我查看方法的响应时,我可以在开发者工具中看到当前市场上所有的播放器价格。

所以我尝试用 Java 对其进行编码以获得这些价格,但我的输出与开发者工具中给出的响应完全不同。

这是我的代码:

HttpClient client = new DefaultHttpClient();
        String url = "https://utas.s2.fut.ea.com/ut/game/fifa15/transfermarket?maskedDefId=20801&start=0&num=16&type=player";
        HttpPost loginPost = new HttpPost(url);
        loginPost.setHeader("Host", "utas.s2.fut.ea.com");
        loginPost.setHeader("Connection", "keep-alive");
        loginPost.setHeader("Content-Lenght", "1");
        loginPost.setHeader("Cache-Control", "max-age=0");
        loginPost.setHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
        loginPost.setHeader("Origin", "https://www.easports.com");
        loginPost.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36");
        loginPost.setHeader("Content-Type", "application/json");
        loginPost.setHeader("Accept", "application/json");
        loginPost.setHeader("X-UT-SID", "23c19a93-32ac-4f52-9aab-21c6be112ede");
        loginPost.setHeader("X-UT-Embed-Error", "true");
        loginPost.setHeader("X-UT-PHISHING-TOKEN", "8649502695209937021");
        loginPost.setHeader("X-HTTP-Method-Override", "GET");
        loginPost.setHeader("Referer", "https://www.easports.com/iframe/fut15/bundles/futweb/web/flash/FifaUltimateTeam.swf?cl=144469");
        loginPost.setHeader("Accept-Encoding", "gzip,deflate");
        loginPost.setHeader("Accept-Language", "nl-NL,nl;q=0.8,en-US;q=0.6,en;q=0.4");
        loginPost.setHeader("Cookie", "CEM-Rememberlogin=mRLLf4Ua9QJAz1J1va8yrhwlh9jFEaLsccY1Q3Ja7wREWecJnF3H348jrRpTnr3qXnhX-YKV6TH3HWgEPqgExDUP2vMFeiwkAYSkhyMuJUyHF_Fsou-fiv7Ur2XVYpqVo1KEP_dO0lLaJ5zTV1I8paWera57lPKmWxY5KzOdnRTGBbpbBv2bJOVPlGLpUFWmbOdMxElcTQga7S2-nM3icZc0JQQ2gmtDCKJ48VHSTl3x3BEuT3ltfNvFEt8elFIf; Path=/");
List <NameValuePair> nvps = new ArrayList <NameValuePair>();
        nvps.add(new BasicNameValuePair("maskedDefId", "20801"));
        nvps.add(new BasicNameValuePair("num", "16"));
        nvps.add(new BasicNameValuePair("start", "0"));
        nvps.add(new BasicNameValuePair("type", "player"));
        loginPost.setEntity(new UrlEncodedFormEntity(nvps));
        HttpResponse response = client.execute(loginPost);
        HttpEntity entity = response.getEntity();
        String content = EntityUtils.toString(entity);
        System.out.println(content);

这是开发人员工具显示的响应以及我需要的内容:

{"auctionInfo":[{"itemData":{"id":164674417976,"timestamp":1412181858,"itemType":"player","pile":5,"resourceId":1929400641,"rating":93,"leagueId":0, etc}]}}

这是我的回应: ?[][][][][][][][]?V?M-.NLOU??+???Q*JM,??S?RJ?(?,JMQ([]?[]G[]Et???S??L[][]k[]??[]?6[][][] 其中[]代表未知字符(正方形)

所以我的问题是:如何调整代码以便获得请求 URL 的响应? 任何帮助将不胜感激

编辑: 我所要做的就是删除一些“设置”的标题: 这些是我仍然需要的“设置”标题:

loginPost.setHeader("Host", "utas.s2.fut.ea.com"); loginPost.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36"); loginPost.setHeader("X-UT-SID", "23c19a93-32ac-4f52-9aab-21c6be112ede"); loginPost.setHeader("X-UT-Embed-Error", "true"); loginPost.setHeader("X-UT-PHISHING-TOKEN", "8649502695209937021"); loginPost.setHeader("X-HTTP-Method-Override", "GET");

但是在这里,“X-UT-SID”和“X-UT-PHISHING-TOKEN”的值不正确,它们不是实际值(因为我从上一个会话中复制了它们)。我应该如何修复我的代码以获得实际值?

提前致谢

【问题讨论】:

  • 那么当您运行代码时得到的响应是什么?你说的回复和开发者工具有很大的不同
  • 是什么让您认为您需要POST?为什么你在查询和正文中放置相同的参数?
  • 在网络应用程序中搜索转会市场时,我必须按下“搜索”按钮,该按钮会发出后请求(在开发人员工具中说明)。由于我正在模拟后期请求,因此我将添加我在开发者工具中所述的后期请求中找到的所有参数(我将添加图像)

标签: java http-post apache-httpclient-4.x


【解决方案1】:

有文档吗?也许您必须手动设置编码,例如:

loginPost.setHeader("Content-Type", "application/json; charset=utf-8");

也许将“utf-8”更改为其他字符集(如“iso-8859-1”)

【讨论】:

  • 感谢您的回答,但没有奏效。我有两种可能为什么代码没有返回正确的输出:也许我必须自己设置 cookie(在代码中,我只是复制了开发人员工具中说明的 cookie)或者我必须添加代码以从 JsonObject 更改到 JavaObject,因为“实体”现在在 Json 中(因为服务器的响应是 Json)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-16
  • 1970-01-01
  • 2019-08-08
  • 1970-01-01
相关资源
最近更新 更多