在 Go 中发送未编码的 GET 请求

我需要向不符合规范的 API发送未编码的 GET 请求。目标 API 不接受编码的 URL,我只能按原样发送请求,而无需任何查询编码。默认情况下net/http对请求进行编码。我试过这个:


client := &http.Client{}


req, _ := http.NewRequest("GET", `https://api.website.com/rest/v1/item/0?search=[{"key":"tag","value":"myvalue"}]`, nil)


req.Header.Set("Authorization", "Bearer " + viper.GetString("ACCESS_TOKEN"))

response, _ := client.Do(req)

defer req.Body.Close()


data, _ := ioutil.ReadAll(response.Body)

fmt.Printf("%s\n", data)

我试图构建自己的Request和操纵的RawQuery,但没有成功。我不断收到一个错误的请求,而如果我通过 Postman 发送相同的请求,一切都很好。


编辑:这就是我尝试自己设置 URL 的方法,如果我打印它,我可以看到它没有编码。我得到的错误是:panic: runtime error: invalid memory address or nil pointer dereference。


client := &http.Client{}

req, _ := http.NewRequest("GET", "", nil)


req.URL = &url.URL{

    Host:     "api.website.com",

    Scheme:   "https",

    RawQuery: `/rest/v1/item/0?search=[{"key":"tag","value":"myvalue"}]`,

}


req.Header.Set("Authorization", "Bearer " + viper.GetString("RAINDROP_TOKEN"))

res, _ := client.Do(req)

defer req.Body.Close()


data, _ := ioutil.ReadAll(res.Body)

fmt.Printf("%s\n", data)


qq_花开花谢_0
浏览 97回答 1
1回答

慕村9548890

创建请求时指定协议和主机。将URL.Opaque设置为所需的请求 URI:req, _ := http.NewRequest("GET", "https://api.website.com/", nil)req.URL.Opaque = `/rest/v1/item/0?search=[{"key":"tag","value":"myvalue"}]`req.Header.Set("Authorization", "Bearer " + viper.GetString("RAINDROP_TOKEN"))res, _ := client.Do(req)defer req.Body.Close()data, _ := ioutil.ReadAll(res.Body)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go