使用JSON对象POST Http请求

时间:2016-11-01 00:51:21

标签: java http-headers http-post jsoup

我正在开展一项宠物项目,以便在ESPN上从我自己的幻想联盟中获取幻想足球数据。我遇到的问题似乎已经过去了,我需要登录才能申请联盟的网页。

我点击的网址是

  

http://games.espn.com/ffl/leaguesetup/ownerinfo?leagueId=123456&seasonId=2016

通过查看GET请求看起来我被重定向到

  

http://games.espn.com/ffl/signin?redir=http://games.espn.com/ffl/leaguesetup/ownerinfo?leagueId=123456&seasonId=2016

立即将我带到登录提示窗口。当我登录时,我检查POST请求并记下所有请求标头。看起来POST上请求的URL是

  

https://registerdisney.go.com/jgc/v5/client/ESPN-FANTASYLM-PROD/guest/login?langPref=en-US

另外我注意到以下JSON反对传递:

db.my_collection.findOne({my_query:'is_awesome'}, {'big_array.0':1})

使用请求标头和JSON对象,我执行了以下操作:

        {"loginValue":"myusername","password":"mypassword"}

假设我在正确的轨道上,我目前从服务器回来的是服务器是

  

返回HTTP响应代码:400 for URL:https://registerdisney.go.com/jgc/v5/client/ESPN-FANTASYLM-PROD/guest/login?langPref=en-US

任何想法发生了什么,或者我是否采取了完全错误的方法?我试图使用JSoup,但也没有运气,我相信JSoup下面也使用HttpUrlConnection。

我是否需要首先执行某种GET请求,保存一些内容然后执行POST请求?它应该如何运作?

3 个答案:

答案 0 :(得分:0)

您正在尝试使用JSoup模拟Web浏览器的行为。正如您所经历的那样,这非常复杂,而JSoup并非用于模拟浏览器。当您开始制作HTTP标头时,最好采用另一种方式。

您的问题的解决方案是使用可以编程方式操作的浏览器。 Selenium或多或少是Java中的事实标准。

Selenium启动您最喜爱的浏览器(Firefox,Chrome,..),让您从Java程序中控制它。您还可以检索网页的内容,以便使用JSoup删除它们。 Selenium有详细记录,您可以毫不费力地找到所需的文档/教程。

答案 1 :(得分:0)

您问题的另一个答案。虽然我不可能重现你的问题(没有橄榄球幻想帐户而且我无意创建一个),但我仍然可以尝试提供一些方法帮助。

我会通过浏览器使用网络检查器解决问题,在浏览器和服务器之间的所有交换中复制文件,并尝试在我的代码中重现这一点。

答案 2 :(得分:0)

Authorization标头中的API密钥值只能在有限的时间内重复使用。如果它已过期,则注册响应正文将包含" API_KEY_INVALID"错误。