我正在尝试为我的Rails应用程序的用户设置OAuth到GetPocket (http://getpocket.com)。
在Pocket Authentication文档(http://getpocket.com/developer/docs/authentication)的第2步中,我在构建确切的Faraday请求时遇到了麻烦。
下面的请求可以工作:
Faraday.post('https://getpocket.com/v3/oauth/request', {consumer_key: 'key', redirect_uri: 'localhost:3000'})
但我希望响应是JSON。我想能够添加一个"Content-Type":"application/json"头请求,但我所有的尝试似乎不工作。
有趣的是,当我执行以下操作时,请求失败(它返回200,但不返回请求令牌,只是返回整个HTML页面):
conn = Faraday.new('https://getpocket.com/v3/oauth/request')
conn.post('/', {consumer_key: 'key', redirect_uri: 'localhost:3000'})
我如何得到我的法拉第POST请求到口袋API返回JSON结果?
对于1-liner,我尝试了下面的方法,它以JSON形式返回。响应格式的密钥头是X-Accept
,而不是Content-Type
。
Faraday.post 'https://getpocket.com/v3/oauth/request', { 'consumer_key' => 'key', 'redirect_uri' => 'localhost:3000'}, { 'X-Accept' => 'application/json' }
当我在IRB中尝试时,响应是JSON。
对于第二个代码部分,我相信当你在'/'处做POST时,它只在根域做POST,这是getpocket.com,从而返回HTTP 200和getpocket.com登录页面的整个HTML页面。从输出中,有一部分表示这一点(见下文)
...snip...
:url=>#<URI::HTTPS:0x000000028ab900 URL:https://getpocket.com/>, :request_headers=>{"User-Agent"=>"Faraday v0.8.9", "Content-Type"=>"application/x-www-form-urlencoded"},
...snip..
无论如何,您可以尝试以下在IRB中测试时为我工作的方法。
conn = Faraday.new('https://getpocket.com')
conn.post('/v3/oauth/request', {consumer_key: 'key', redirect_uri: 'localhost:3000'}, { 'X-Accept' => 'application/json' })