Как отправить вложенные заголовки для HTTP-запроса Golang - PullRequest
0 голосов
/ 26 июня 2018

У меня есть более старый скрипт, подобный следующему в Ruby, который я пытаюсь скопировать в Golang

RestClient::Request.execute(
    url: "myurl",
    method: :put,
    headers: {
      params: {
        foo: 'bar'
      }
 })

Вот что у меня есть на Голанге:

req, _ := http.NewRequest("PUT", url, nil)
req.Header.Add("params", "{\"foo\": \"bar\"}")
client := &http.Client{}
rsp, err = client.Do(req)

Это не работает, но я не уверен, что делать. Нужно ли форматировать эту строку по-другому?

Заголовок для запроса:

map[Accept:[*/*] Accept-Encoding:[gzip, deflate] User-Agent:[rest-client/2.0.2 (my_pc x86_64) ruby/2.4.2p198] Content-Length:[0] Content-Type:[application/x-www-form-urlencoded]]

Дамп запроса (с использованием httputil.DumpRequest):

PUT /my_path?foo=bar HTTP/1.1
Host: localhost:8080
Accept: */*
Accept-Encoding: gzip, deflate
Content-Length: 0
Content-Type: application/x-www-form-urlencoded
User-Agent: rest-client/2.0.2 (my_pc) ruby/2.4.2p198

Похоже, мне просто нужно поместить информацию в путь в качестве параметра запроса. Если есть что-то еще, я должен проверить. Длина содержимого равна 0, поэтому тела тоже нет.

1 Ответ

0 голосов
/ 28 июня 2018

Я только что запустил ваш код Ruby и обнаружил, что он на самом деле не отправляет заголовки, вместо этого он добавляет параметры запроса к вашему запросу:

PUT /?foo=bar HTTP/1.1
Accept: */*; q=0.5, application/xml
Accept-Encoding: gzip, deflate
User-Agent: Ruby
Host: localhost:8080

Так что вы можете просто использовать этот код для воспроизведения в Go:

req, _ := http.NewRequest("PUT", url, strings.NewReader(`{"foo": "bar"}`))
client := &http.Client{}
rsp, err = client.Do(req)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...