【问题标题】:Proper form of HTTPS requestHTTPS 请求的正确形式
【发布时间】:2013-03-25 23:20:28
【问题描述】:

我需要发送 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"))

【问题讨论】:

  • 旁注:首先编写常规 WinForm/控制台代码并对其进行调试可能更容易(因为您可以在 Windows 上使用 Fiddler 拦截流量比在手机上更容易)并且仅将代码移植到手机.
  • 代码对我有用。是什么让您认为它不起作用?
  • 感谢大家的帮助,我将 AcceptCharset 标头更改为正确的形式并在 WinForms 中对其进行了调试。最后我意识到,我忘记了数据中的 redirect_uri 参数,因为主机头替换了它。现在一切正常,谢谢。

标签: c# httprequest webclient


【解决方案1】:

至少一个问题似乎是目标服务器的预期字符集应该设置在 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";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-15
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多