为什么邮递员在 HTTP GET 中发送表单数据?
Why is postman sending form data in an HTTP GET?
我从 API 供应商那里收到了一个 Postman json
collection,它工作得很好,但有一些东西让我感到困惑:请求是 GET 格式的,但是有一个x-www-form-urlencoded
body.
URL: https://login.microsoftonline.com/d1e<secret>9563/oauth2/token
当我查看 postman-generated c# 代码时,谜团还在继续:
var client = new RestClient("https://login.microsoftonline.com/d1e...d3/oauth2/token");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddParameter("grant_type", "client_credentials");
request.AddParameter("client_id", "c06bb...79");
request.AddParameter("client_secret", "7~u...D");
request.AddParameter("resource", "https://vault.azure.net");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
注意 GET 调用的 AddParameter
结构。对我来说,这必须是一个 slight-of-hand 用于仅将这些值添加到查询字符串。但是当我查看 postman 控制台时,我看到:
在 postman 控制台中,我希望看到那些附加到 url 的参数作为查询字符串,然后一切都会变得有意义。但是你可以看到这是一个真正的 Request Body
.
当我在我的 c# 代码中进行 GET 调用时,我喜欢使用简单而可靠的 WebClient
object 来调用 DownloadString()
方法。但是这个方法只针对GET,没办法发送form-post风格的body
,可以理解。
post 人真的发送了一个 GET 并将所有这些值作为查询字符串附加到 url 吗?我应该在我的 DownloadString()
电话中做同样的事情吗?还是这里发生了其他事情?相反,我是否应该在我的 c# 中调用 UploadString()
方法并将表单 post BODY 作为 GET 发送?
Http 协议支持向请求添加正文,但您使用的 WebClient class 不支持。大概是因为它不被认为是常态。
不过,我确信 Microsoft 有充分的理由在 OAuth 流程中使用它。那些家伙通常做事都是对的!
API 只是一个抽象,您可以将任何您想要的内容发送到 API。这取决于实现,服务器如何处理这些数据。
有些服务只考虑它需要的信息而忽略其他信息
一些服务会考虑整个请求并验证它是否只有允许的数据。允许什么取决于服务
Postman 只是一个向服务器发送数据的客户端,由您决定它应该发送哪些信息。如果您不需要任何主体,则将其保留为 none。如果您需要一些东西,请添加它。
我从 API 供应商那里收到了一个 Postman json
collection,它工作得很好,但有一些东西让我感到困惑:请求是 GET 格式的,但是有一个x-www-form-urlencoded
body.
URL: https://login.microsoftonline.com/d1e<secret>9563/oauth2/token
当我查看 postman-generated c# 代码时,谜团还在继续:
var client = new RestClient("https://login.microsoftonline.com/d1e...d3/oauth2/token");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddParameter("grant_type", "client_credentials");
request.AddParameter("client_id", "c06bb...79");
request.AddParameter("client_secret", "7~u...D");
request.AddParameter("resource", "https://vault.azure.net");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
注意 GET 调用的 AddParameter
结构。对我来说,这必须是一个 slight-of-hand 用于仅将这些值添加到查询字符串。但是当我查看 postman 控制台时,我看到:
在 postman 控制台中,我希望看到那些附加到 url 的参数作为查询字符串,然后一切都会变得有意义。但是你可以看到这是一个真正的 Request Body
.
当我在我的 c# 代码中进行 GET 调用时,我喜欢使用简单而可靠的 WebClient
object 来调用 DownloadString()
方法。但是这个方法只针对GET,没办法发送form-post风格的body
,可以理解。
post 人真的发送了一个 GET 并将所有这些值作为查询字符串附加到 url 吗?我应该在我的 DownloadString()
电话中做同样的事情吗?还是这里发生了其他事情?相反,我是否应该在我的 c# 中调用 UploadString()
方法并将表单 post BODY 作为 GET 发送?
Http 协议支持向请求添加正文,但您使用的 WebClient class 不支持。大概是因为它不被认为是常态。
不过,我确信 Microsoft 有充分的理由在 OAuth 流程中使用它。那些家伙通常做事都是对的!
API 只是一个抽象,您可以将任何您想要的内容发送到 API。这取决于实现,服务器如何处理这些数据。
有些服务只考虑它需要的信息而忽略其他信息
一些服务会考虑整个请求并验证它是否只有允许的数据。允许什么取决于服务
Postman 只是一个向服务器发送数据的客户端,由您决定它应该发送哪些信息。如果您不需要任何主体,则将其保留为 none。如果您需要一些东西,请添加它。