登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-02-21 22:24:30 246浏览 收藏

“纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《在 Go 中发送未编码的 GET 请求》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Golang相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!

问题内容

我需要向不符合规范的 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:运行时错误:无效的内存地址或零指针取消引用

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)

解决方案


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

Run it on the playground

今天关于《在 Go 中发送未编码的 GET 请求》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>