http - 在 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)
解决方案
创建请求时指定协议和主机。将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)
推荐阅读
- haskell - 为什么 GHCi 在此实例声明中报告“约束必须是单型”?
- php - 来自 AWS Launch Configuration 的用户数据未执行 Composer 安装
- sql - 根据在 Oracle SQL 中输入的日期获取 ID 的值
- c# - 是否可以在机器人中具有导出到 excel 按钮?
- angular - 离子不更新视图中的变量
- python - 尝试在 Python 上制作 Snake 游戏。我在哪里下载光标扩展
- java - 变量“double”给我错误,程序正在执行无限循环?
- ios - 隐藏某个表格行 - Swift 4
- excel-formula - 需要公式:复制单元格,省略项目前后的文本
- docusignapi - DocuSign 嵌入式发送注销用户