Ruby Net :: HTTP – 以下301重定向

我的用户提交网址(混合在mixcloud.com上),我的应用程序使用它们来执行网络请求。

一个好的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"

>我如何向下钻取301以查看是否需要我们进入有效的资源或错误页面?
>是否有一个工具可以全面了解特定域可能适用于其网址的规则?

如果您不像网络服务器所期望的那样键入URL,则301重定向很常见。他们发生的频率比你想象的要频繁得多,你通常在浏览时通常不会注意到它们,因为浏览器会为你自动完成所有操作。

想到两个选择:

1:使用open-uri

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

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

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.header['location']))
   end
   r
end

如果您想要更聪明,您可以尝试在获得404响应时向URL添加或删除丢失的反斜杠。您可以通过创建一个像get_response_smart这样的方法来处理除了重定向之外的这个URL。

http://stackoverflow.com/questions/7210232/ruby-nethttp-following-301-redirects

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:Ruby Net :: HTTP – 以下301重定向