gpt4 book ai didi

http - Golang的 "net/http"中客户端HTTP请求和服务端HTTP请求有什么区别

转载 作者:数据小太阳 更新时间:2023-10-29 03:08:54 25 4
gpt4 key购买 nike

我看到有人使用“net/http”包的 NewRequest() 方法来测试 API。为什么不使用“net/http/httptesting”中的 NewRequest() 方法?有什么不同?文档建议the following :

// To generate a client HTTP request instead of a server request, see
// the NewRequest function in the net/http package.

例如,在处理 cookie 方面会有什么不同?两者看起来非常相似。

最佳答案

TL;DR:它们是相同的类型,在两个用例中的使用方式略有不同,并以不同的方式初始化以服务于这些用例


区别仅在于用法 - 它们是同一类型 http.Requesthttp.NewRequest 用于更多“生产”用例,即客户端 - “创建一个新请求以发送到服务器”。在编写 HTTP 服务器时,创建测试请求有时很有用,这就是 httptest.NewRequest 所做的。 http.NewRequest 的文档在这里很有帮助:

NewRequest returns a Request suitable for use with Client.Do or Transport.RoundTrip. To create a request for use with testing a Server Handler, either use the NewRequest function in the net/http/httptest package, use ReadRequest, or manually update the Request fields. See the Request type's documentation for the difference between inbound and outbound request fields.

如果您查看 http.Request type 的文档,您会发现类似以下内容:

// URL specifies either the URI being requested (for server
// requests) or the URL to access (for client requests).
//
// For server requests, the URL is parsed from the URI
// supplied on the Request-Line as stored in RequestURI. For
// most requests, fields other than Path and RawQuery will be
// empty. (See RFC 7230, Section 5.3)
//
// For client requests, the URL's Host specifies the server to
// connect to, while the Request's Host field optionally
// specifies the Host header value to send in the HTTP
// request.
URL *url.URL

注意“对于客户端请求”与“对于服务器请求”。

如果你看到一个地方没有使用httptest.NewRequest,那可能是因为:

  1. 他们不知道
  2. 或者他们需要更仔细的微调,而 http.NewRequest 没有提供

关于http - Golang的 "net/http"中客户端HTTP请求和服务端HTTP请求有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55890124/

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