【发布时间】: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