Ruby – validation和更新URL

我一直在尝试修改此方法,从重定向并返回url的内容,而不是返回新的有效url。

在阅读Net :: HTTP对象后,我仍然不确定get_response方法的确切工作原理。 这是什么下载页面? 有没有我可以调用的方法只是pingurl而不是下载它?

require 'net/http' def validate(url) uri = URI.parse(url) response = Net::HTTP.get_response(uri) case response when Net::HTTPSuccess return response when Net::HTTPRedirection return validate(response['location']) else return nill end end puts validate('http://somesite.com/somedir/mypage.html') 

你是正确的, get_response向服务器发送HTTP GET请求,服务器请求整个页面。

您想使用HEAD请求而不是GET。 这会请求GET请求获得的相同HTTP响应头,包括状态代码(200,404等),但不下载整个页面。

请参阅Net::HTTPrequest_headhead方法。 例如

 url = URI.parse('http://www.ruby-doc.org/stdlib/libdoc/net/http/rdoc/index.html') res = Net::HTTP.start(url.host, url.port) {|http| http.head(url.path) } puts res.class 

你的意思是,通过’ping the url’,你想知道url请求是否返回HTTP 200响应?

我没有看过get_response的实现,但我认为它只是通过它的外观发出一个HTTP GET请求。

如果你想检查HTTP 200响应,我想你可以继续做get_response,直到得到HTTPSuccess && HTTPOK。