我一直在尝试修改此方法,从重定向并返回url的内容,而不是返回新的有效url。
在阅读Net :: HTTP对象后,我仍然不确定get_response方法的工作原理。这是什么下载页面?是否有另一种我可以调用的方法,只是ping网址而不是下载它?
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')
答案 0 :(得分:1)
get_response
向服务器发送HTTP GET请求是正确的,该服务器请求整个页面。
您想使用HEAD请求而不是GET。这会请求GET请求获得的相同HTTP响应头,包括状态代码(200,404等),但不下载整个页面。
查看request_head
的{{1}}和head
方法。例如
Net::HTTP
答案 1 :(得分:0)
你的意思是,通过'ping the url',你想知道url请求是否返回HTTP 200响应?
我没有看过get_response的实现,但我认为它只是通过外观发出HTTP GET请求。
如果你想检查HTTP 200响应,我想你可以继续做get_response,直到得到HTTPSuccess&& HTTPOK。