gpt4 book ai didi

c# - WebRequest:查询字符串数据与 x-www-form-urlencoded 内容

转载 作者:行者123 更新时间:2023-12-04 23:23:07 25 4
gpt4 key购买 nike

我正在尝试按照以下说明调用 Google 的 OAuth2 身份验证服务:https://developers.google.com/accounts/docs/OAuth2ForDevices

我将所有必需的参数放入查询字符串并发送请求。这适用于“获取用户代码”部分,但不适用于“获取访问和刷新 token ”部分。

经过多次尝试并获得 400 Bad Request 错误后,我发现,您可以使用 FormUrlEncodedContent 创建一个请求,并使用 application\x-www-form-urlencoded 作为内容发送数据,而不是将数据放入查询字符串中内容类型。

这是之前的代码:

var requestMessage = new HttpRequestMessage();
requestMessage.Method = "POST";
requestMessage.RequestUri = new Uri(fullUrl);

fullUrl 是这样的:
https://accounts.google.com/o/oauth2/device/code?client_id=812741506391-h38jh0j4fv0ce1krdkiq0hfvt6n5amrf.apps.googleusercontent.com&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile

新代码是:
var requestMessage = new HttpRequestMessage();
requestMessage.Method = "POST";
requestMessage.RequestUri = new Uri(url);
requestMessage.Content = new FormUrlEncodedContent(CreateDictionary(queryStringNames, queryStringValues));

网址在哪里:
https://accounts.google.com/o/oauth2/device/code

queryStringNames 和 queryStringValues 是所需参数的名称和值的字符串数组。

这两种方法有什么区别?假设所有 POST 调用都可以使用 URL Encoded Content 请求而不是将数据放入查询字符串中是否安全?

最佳答案

一般情况下,POST 请求不需要查询字符串,但仍受制于 Server 的逻辑实现。在 OAuth 是众所周知的标准并且它们确实遵循良好实践的情况下,除非在 API 中明确提到将参数作为查询字符串发送,否则使用表单编码数据是安全的。

查询字符串和发布数据是两组不同的参数。如果服务器需要查询字符串,那么您必须只发送查询字符串。这完全取决于服务器端逻辑的实现方式。您不能交替使用它们。大多数 API 文档都清楚地说明了他们的期望。

关于c# - WebRequest:查询字符串数据与 x-www-form-urlencoded 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19022427/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com