Сбой HTTP GET при добавлении массива в param, но будет успешным при использовании почтальона - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть URL, который содержит массив. Когда я печатаю URL, я получаю:

https://myurl.com?args=["2019-11-06T19:20:00Z", "2019-11-06T22:30:00Z"]

Когда я делаю GET с почтальоном, я могу получить успешный код состояния: Успех 200

Но когда я делаю это с Go,Я получаю код состояния: 502 Плохой запрос

client := http.Client{}
    token := GetJWTToken()
    bearer := "Bearer " + token

    url := "https://myurl.com?args=[" + start.Format(time.RFC3339) + ", " + end.Format(time.RFC3339) + "]"

    req, err := http.NewRequest("GET", url, nil)
    if req != nil {
        req.Header.Add("Authorization", bearer)
        req.Header.Set("Content-Type", "application/json")
    }
    resp, err := client.Do(req)
    bodyBytes, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        log.Fatal(err)
    }
    bodyString := string(bodyBytes)
    log.Info(bodyString) // Prints 502 Bad Gateway

Я распечатал 2 URL-адреса, и они абсолютно совпадают.

Я попытался удалить «массив» в URL-адресе, иочевидно, что он терпит неудачу, потому что API ожидает этот параметр, но он может достигнуть API.

Итак, я знаю, в чем проблема, но не знаю, как ее исправить, я не владеюAPI, поэтому я не могу его изменить.

Кажется, почтальон что-то делает изнутри, или какая разница между моим кодом и запросом почтальона?

1 Ответ

2 голосов
/ 07 ноября 2019

Вероятно, лучше не создавать свой URL вручную. Используйте соответствующие инструменты:

addr, _ := url.Parse("https://myurl.com")
query := url.Values{}
query.Add("args", "[" + start.Format(time.RFC3339) + ", " + end.Format(time.RFC3339) + "]")
addr.RawQuery = query.Encode()

req, err := http.NewRequest("GET", addr.String(), nil)
...