2

POST リクエストを送信し、アクセス トークンを受け取る必要があります。HTTP リクエストは次のようになります。

POST /oauth/token HTTP/1.1
Host: api.quizlet.com
Authorization: Basic c3ZWRUhNZVA0aDp3eS4yUXA0ZXNFY0xQUFl2WkRFTGpn
Content-Type: application/x-www-form-urlencoded; charset=UTF-8

grant_type=authorization_code&code=GENERATED_CODE

リクエストで「grant_type」と「code」を送信する方法がわかりません。(Fiddler によると、私がテストしたところ) リクエスト本文にある必要があるためです。

私が持っているコードは次のようになります:

            client = new WebClient();
            client.Headers[HttpRequestHeader.Authorization] = "Basic " +       "MY_SECRET_CODE";
            client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
            client.Headers[HttpRequestHeader.Host] = "api.quizlet.com";
            client.Headers[HttpRequestHeader.AcceptCharset] = "UTF-8";
            client.UploadStringCompleted += ClientOnUploadStringCompleted;
            client.UploadStringAsync(tokenUrl, "POST",string.Format("grant_type={0}&code={1}",
                                                   HttpUtility.HtmlEncode("authorization_code"),HttpUtility.HtmlEncode(code)));

ところで、このコードは WP7 で実行され、私はこの単一のリクエストをほぼ 2 日間いじっていましたが、サンプル リクエストを Fiddler に貼り付けようとして適切なトークンを受け取ったため、リクエストで提供した値は 100% 正しいです。

編集:アップロードしようとしたデータのredirect_uriパラメーターを忘れたので、機能しませんでした...適切なデータ文字列は次のようになります:

 string.Format("grant_type={0}&code={1}&redirect_uri={2}",
            HttpUtility.HtmlEncode("authorization_code"),HttpUtility.HtmlEncode(code),    HttpUtility.HtmlEncode("http://someurl.com"))
4

1 に答える 1

0

少なくとも 1 つの問題は、ターゲット サーバーに想定される文字セットを AcceptCharset ではなく ContentType ヘッダーに設定する必要があることです。

            client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded; charset=UTF-8";
            client.Headers[HttpRequestHeader.Host] = "api.quizlet.com";
            //client.Headers[HttpRequestHeader.AcceptCharset] = "UTF-8";
于 2013-03-26T01:27:29.330 に答える