Crystal lang:重定向后如何查找结束URL?
我现在正在用Crystal将一个脚趾浸入水中,作为练习,尝试将我的一个Python脚本移植到另一个脚本中 该脚本从URL下载“最新”PDF,URL的格式为:“”。当被访问时,该URL会自动重定向到页面以获取最新下载,例如“ 我很难在Crystal中实现这一点,这样我就可以获取重定向最终到达的实际URL 在Python中,我会:Crystal lang:重定向后如何查找结束URL?,url,redirect,httpclient,crystal-lang,Url,Redirect,Httpclient,Crystal Lang,我现在正在用Crystal将一个脚趾浸入水中,作为练习,尝试将我的一个Python脚本移植到另一个脚本中 该脚本从URL下载“最新”PDF,URL的格式为:“”。当被访问时,该URL会自动重定向到页面以获取最新下载,例如“ 我很难在Crystal中实现这一点,这样我就可以获取重定向最终到达的实际URL 在Python中,我会: currenturl = urllib.request.urlopen(latesturl) #above will redirect to URL of format
currenturl = urllib.request.urlopen(latesturl)
#above will redirect to URL of format http://somesite.com/download/XXXXX/
#where XXXXX is the current d/load
endurl = currenturl.geturl()
…这在“endurl”变量中为我提供了结束URL
但是,对于Crystal的“http/client”,我看不到任何返回重定向最终到达的实际URL的方法。可能吗?Crystal的
HTTP::Client
当前无法自动跟踪重定向
请注意,您正在阅读一个过时的API文档版本,当前版本为(但我认为在0.24.1和0.26.1之间没有相关的更改)
但您可以通过读取HTTP响应的位置
头轻松访问重定向URL:
response = HTTP::Client.get latesturl
endurl = response.headers["Location"]
伟大的谢谢还有一个小难题:
response.headers[“Location”]
返回endURL的相对路径,而不是完整URL。也就是说,我得到的是/download/4563/
而不是http://somesite.com/download/4563/
。没什么大不了的,因为我可以将域存储在一个var中并重新连接它,但是有没有一种内置的方法来获取完整的URL?没有。这只是直接从httpapi检索普通值。正如前面提到的HTTP::Client
还不理解重定向的概念,因此不会为您提供完全限定的URL。