2014-10-08 82 views
2

我是HttpClient的新手,我试图获得FIFa终极团队网络应用程序中玩家的价格。Java HttpClient从Post方法获得响应

使用开发工具,我设法找到Post Method来产生玩家的价格。

搜索特定播放器会提供以下URL请求。 https://utas.s2.fut.ea.com/ut/game/fifa15/transfermarket?maskedDefId=20801 &开始= 0 & NUM = 16 &类型=玩家

当我观看的响应该方法,我可以在Developer Tools中看到目前市场上所有玩家的价格。

所以我试图用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”的值不正确,它们不是实际值(因为我从前一个会话中复制它们)。我应该如何修复我的代码才能获得实际的价值?

在此先感谢

+1

那么什么是你得到当响应你运行你的代码?您所说的回应与开发人员工具 – mmcrae 2014-10-08 14:54:37

+0

如此不同,您认为您需要“POST”吗?为什么你把相同的参数放在查询和正文中? – njzk2 2014-10-08 16:53:14

+0

在网络应用程序中搜索转换市场时,我必须按下“搜索”按钮,发出后请求(在开发人员工具中声明)。由于我在模拟请求后,我添加了我在开发者工具中发布的后请求中找到的所有参数(我将添加图像) – PaterMark 2014-10-08 17:26:35

回答

0

是否有一些文件?也许你不得不手动设置的编码,如:

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

也许改变“UTF-8”与其它字符集(如“ISO-8859-1”)

+1

感谢您的回答,但它没有奏效。我有两种可能性,为什么代码没有返回正确的输出:也许我必须自己设置cookie(在代码中,我只是复制了开发人员工具中声明的cookie),或者我必须添加代码以从JsonObject到一个JavaObject,因为“实体”现在在Json中(因为服务器的响应是Json) – PaterMark 2014-10-09 22:13:00