В чем разница между HTTP-запросом клиента и HTTP-запросом сервера в Golang "net / http" - PullRequest
0 голосов
/ 28 апреля 2019

Я видел, как люди использовали NewRequest() метод пакета "net / http" для тестирования API. Почему бы не использовать метод NewRequest() из "net / http / httptesting"? Какая разница? Документация советует следующее :

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

Какая разница, например, в обработке файлов cookie? Оба кажутся очень похожими.

1 Ответ

1 голос
/ 30 апреля 2019

TL; DR: они одного типа, используются по-разному для двух вариантов использования и инициализируются по-разному для обслуживания этих вариантов использования


Разница только в использовании - они одного типа http.Request. http.NewRequest используется для более «производственного» варианта использования, который является клиентом - «создать новый запрос для отправки на сервер». При написании HTTP-серверов иногда полезно создавать запросы на тестирование, что и делает httptest.NewRequest. Документ http.NewRequest полезен здесь:

NewRequest возвращает запрос, подходящий для использования с Client.Do или Transport.RoundTrip. Создать запрос на использование с тестированием Сервера Обработчик, либо используйте функцию NewRequest в net / http / httptest пакет, используйте ReadRequest или вручную обновите поля запроса. Увидеть Документация типа запроса на разницу между входящими и исходящие поля запроса.

Если вы посмотрите документы типа http.Request , вы найдете такие вещи, как:

// 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 не обеспечивает
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...