我正在尝试为我的rails应用程序的用户设置oauth以获取pocket(http://getpocket.com)。
在Pocket身份验证文档(http://getpocket.com/developer/docs/authentication)的第2步中,我无法构造确切的法拉第请求。
以下请求有效:
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'})
如何将faraday post请求发送到pocket api以返回json格式的结果?
最佳答案
对于1行程序,我尝试了下面的方法,它以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格式的。
对于第二个代码部分,我相信当您在“/”上发帖时,它只在根域getpocket.com上发帖,从而返回getpocket.com登录页的http 200和整个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' })
希望这有帮助。