为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
qq_花开花谢_0 2022-06-21 17:04:36
我需要向不符合规范的 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)
查看完整描述

1 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

创建请求时指定协议和主机。将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)


查看完整回答
反对 回复 2022-06-21
  • 1 回答
  • 0 关注
  • 95 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号