go - net/url 包根据请求查询参数添加换行符
问题描述
我正在调用 Songkick 的 API,将 API 密钥和页码参数编码如下:
Url, err := url.Parse("https://api.songkick.com")
Url.Path += "/api/3.0/metro_areas/" + myArea + "/calendar.json"
parameters := url.Values{}
parameters.Add("apikey", myApiKey)
parameters.Add("page", myPage)
Url.RawQuery = parameters.Encode()
req, err := http.NewRequest("GET", Url.String(), nil)
一切都很好,只是它在我的 apiKey 参数中添加了一个额外的 %0A ,结果查询如下所示:
http://api.songkick.com/api/3.0/metro_areas/28714/calendar.json?apikey=myKey%0A&page=12
我一直在关注net/url包中的代码,但我不知道为什么会这样。这可能发生的唯一地方是在转义函数中的 switch case shouldEscape(c, mode)内,但是阅读文档,它不应该是我的情况。
有人对此有提示吗?
只有当我在基于图像golang:latest的Docker 容器中运行它时才会发生这种情况。如果我从本地 PC 运行它,它工作正常。
这就是我读取文件的方式:
bs, err := ioutil.ReadFile("apiKeyFile.txt")
if err != nil {
fmt.Println("Error:", err)
os.Exit(1)
}
return string(bs)
解决方案
该值myApiKey
有一个换行符,并且该换行符编码在查询字符串中。
通过删除不需要的换行符来解决问题。这可以通过使用bytes.TrimSpace从文件数据中修剪前导和尾随空格来完成。
bs, err := ioutil.ReadFile("apiKeyFile.txt")
if err != nil {
fmt.Println("Error:", err)
os.Exit(1)
}
return string(bytes.TrimSpace(bs))
推荐阅读
- next.js - 部署到 Vercel 时,订阅 Pusher 频道的 Nextjs 前端客户端只有在页面重新获得焦点时才会在 websocket 上接收消息
- android-studio - Android滚动视图在布局中隐藏顶部小部件
- python - 查找 Xarray 聚合结果的时间索引
- ubuntu - Yubikey 分发 u2f_keys
- javascript - tensorflow.data.webcam():“未捕获(承诺中)类型错误:无法设置只有 getter 的属性消息”
- jupyter-notebook - Jupyter Notebook 无法添加新单元格
- sweetalert2 - 如何使用 SweetAlert2 对队列链中的单个 Swal 使用 Promise
- node.js - 尽管应用程序以 0 错误运行,但未使用 nodejs 通过 sendgrid 接收邮件
- javascript - Javascript 在哪里为函数调用的结果分配内存?堆栈还是堆?
- mongodb - 安装 MongoDB 时出现错误