dpi*_*ers 3 http urlencode go amazon-web-services
我试图从http://freemusicarchive.org下载一首曲目.一般来说,您可以通过附加/下载到轨道URL来下载文件,轨道URL通过重定向到S3上的资产进行响应.
例如,试试这个链接:http: //freemusicarchive.org//music//Zola_Jesus//Live_at_WFMU_on_Scott_McDowells_Show_1709//Odessa/download
要查看重定向,请将链接放在此处:http: //www.wheregoes.com/retracer.php
我可以使用如下代码获取重定向位置:
req, err := http.NewRequest("GET", url, nil)
errHndlr(err)
transport := http.Transport{}
resp, err := transport.RoundTrip(req)
defer resp.Body.Close()
errHndlr(err)
redirect := resp.Header.Get("Location")
Run Code Online (Sandbox Code Playgroud)
我已通过将重定向链接打印到控制台并将其复制/粘贴到我的浏览器中来验证重定向链接,但是当我在同一个URL上调用http.Get时,我从AWS收到"SignatureDoesNotMatch"错误.
如果有人能够提供有关此处出现问题的见解,我将非常感激.
弄清楚了.在处理URL时,将unicode解析为纯文本.我需要使用request.URL.Opaque.
更多信息:https://stackoverflow.com/a/17322831/733860
这个问题与unicode有关.在我的命令中有一个%2F(在我原来的问题中没有显示)Go转换为/应该保留为%2F(cURL正确地将其保留为%2F).将%2F更改为%252F解决了问题.
在创建新的HTTP请求时,Go似乎会将您的unicode解析回纯文本,因此如果您在提交给HTTP请求初始化程序的URL中有%3D,它会将其转换为=.我认为一个明显的解决方案是将%253D放入URL中,但显然Go中存在一个错误,它将%3D转换为=但不是%25转换为%.我不得不使用不透明的URL请求(request.Url.Opaque)来解决这个问题.
| 归档时间: |
|
| 查看次数: |
671 次 |
| 最近记录: |