0

OAuth フローの最初の半分は SurveyMonkey API で動作していますが、有効期間が短い認証コードを有効期間が長い OAuth アクセス トークンと交換しようとすると、HTTP 400 応答が返されます。これは、SurveyMonkey OAuth ガイドのステップ 3 です。

完全な交換のスクラブされたバージョンは次のとおりです。

POST /oauth/token?api_key=<removed> HTTP/1.1
Accept: application/json
Accept-Encoding: gzip, deflate, compress
Content-Length: 338
Content-Type: application/json; charset=utf-8
Host: api.surveymonkey.net
User-Agent: HTTPie/0.7.2

{
    "client_id": "<removed>",
    "client_secret": "<removed>",
    "code": "dKkIJYnimBli3TMHoTdHoT-zkzkUFzfHeaWJJyPVmrYG35R5Q-jLLU-Y7Fg3BR0n3tVTQ6sAmDnwVxHXSjZVdiYTJ7u7SWbLCKgQa061bKJYXSpRhTsEL0v5GMWcMEBC2vje5UjRHp3SScFQEwIIjHKZH5raC5RQJJh.JYWEOqw8Iy-2Ds7km1zYaHGGlxqu",
    "grant_type": "authorization_code",
    "redirect_uri": "https://app.hubspotqa.com"
}

HTTP/1.1 400 Bad Request
Cache-Control: no-store
Connection: keep-alive
Content-Length: 96
Content-Type: application/json; charset=UTF-8
Date: Fri, 24 Jan 2014 00:05:53 GMT
SM-Request-ID: 41264d11-b93d-4f8b-ad1a-c656ccfa268b
Server: nginx

{
    "error": "invalid_request",
    "error_description": "Invalid POST body or Content-Type received."
}

他の HTTP クライアントを使用してもまったく同じエラーを再現できますが、SurveyMonkey API コンソールを使用してアクセス トークンを手動で取得しても問題はありません。私は何を間違っていますか?


副次的な質問: OAuth ガイドでは、ステップ 3 で a を受け入れると記載されていますredirect_uri、Python ガイドの例では を使用していredirect_urlます。正しいパラメータはどれですか? 完全に省略できますか?私のサーバーは確かにどこにでもリダイレクトされることを気にしません。

4

1 に答える 1

3

Content-Type結局のところ、これに必要なのPOSTフォームエンコーディングapplication/x-www-form-urlencodedであり、JSON ではありません。

ドキュメントには実際にはどこにも記載されていないことに注意してください。これは、Python リクエスト ライブラリの使用例に暗示されています。

于 2014-01-24T00:34:06.947 に答える