正确形式的HTTPS请求

时间:2013-03-25 23:20:29

标签: c# httprequest webclient

我需要发送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天了,我在请求中提供的那些值是100%正确的,因为我试图在Fiddler中粘贴样本请求并收到正确的令牌。

编辑: 我忘记了数据中的redirect_uri参数,我试图上传,所以它不起作用......正确的数据字符串应如下所示:

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

1 个答案:

答案 0 :(得分:0)

至少有一个问题似乎是目标服务器的预期字符集应该在ContentType标头中设置,而不是在AcceptCharset中设置:

            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";