gpt4 book ai didi

Ruby Net::HTTP - 遵循 301 重定向

转载 作者:数据小太阳 更新时间:2023-10-29 06:26:21 25 4
gpt4 key购买 nike

我的用户提交 url(到 mixcloud.com 上的 mixes),我的应用使用它们来执行网络请求。

好的 url 返回 200 状态代码:

uri = URI.parse("http://www.mixcloud.com/ErolAlkan/hard-summer-mix/")
request = Net::HTTP.get_response(uri)(
#<Net::HTTPOK 200 OK readbody=true>

但是,如果您忘记了结尾的斜杠,那么我们的 否则很好 url 将返回 301:

uri = "http://www.mixcloud.com/ErolAlkan/hard-summer-mix"
#<Net::HTTPMovedPermanently 301 MOVED PERMANENTLY readbody=true>

404 也会发生同样的事情:

# bad path returns a 404
"http://www.mixcloud.com/bad/path/"
# bad path minus trailing slash returns a 301
"http://www.mixcloud.com/bad/path"
  1. 我如何“深入”到 301 以查看它是将我们带到有效资源还是错误页面?
  2. 是否有一种工具可以全面概述特定域可能应用于其网址的规则?

最佳答案

如果您输入的 URL 与 Web 服务器所期望的不完全相同,则 301 重定向是相当常见的。它们发生的频率比您想象的要高得多,只是您在浏览时通常不会注意到它们,因为浏览器会自动为您完成所有这些工作。

我想到了两种选择:

1:使用open-uri

open-uri 自动处理重定向。所以您需要做的就是:

require 'open-uri' 
...
response = open('http://xyz...').read

如果您在 HTTP 和 HTTPS 之间重定向时遇到问题,请在此处查看解决方案:
Ruby open-uri redirect forbidden

2:使用 Net::HTTP 处理重定向

def get_response_with_redirect(uri)
r = Net::HTTP.get_response(uri)
if r.code == "301"
r = Net::HTTP.get_response(URI.parse(r['location']))
end
r
end

如果您想变得更聪明,您可以尝试在收到 404 响应时添加或删除 URL 中缺少的反斜杠。您可以通过创建类似 get_response_smart 的方法来做到这一点,该方法除了重定向之外还处理此 URL 摆弄。

关于Ruby Net::HTTP - 遵循 301 重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7210232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com