【发布时间】:2019-12-09 19:59:29
【问题描述】:
使用curl,我执行以下操作来检查网页是否在线:
if curl --output /dev/null --silent --head --fail "${url}"; then
echo "URL exists: ${url}"
else
echo "URL does not exist: ${url}"
fi
但是,如果服务器拒绝HEAD 请求(或者我不知道),另一种方法是只请求文件的第一个字节:
if curl --output /dev/null --silent --fail --range 0-0 "${url}"; then
echo "URL exists: ${url}"
else
echo "URL does not exist: ${url}"
fi
第一种情况很容易在 Ruby 中复制:
require 'net/http'
require 'uri'
uri = URI.parse(url)
response = Net::HTTP.get_response(uri)
if response.kind_of? Net::HTTPOK
puts "URL exists: #{url}"
else
puts "URL does not exist: #{url}"
end
如何复制第二个curl 案例?
【问题讨论】:
-
你可以使用'curb'之类的东西(需要libcurl),但简而言之是stackoverflow.com/q/82349/438992
-
kind_of?比较对象的类,而不是对象本身。考虑:case (response),然后是when Net::HTTPOK,它涵盖了更多案例。 -
@tadman 你能扩展一下吗?我从stackoverflow.com/a/12023273/1661012获取
response.kind_of?代码 -
这是一种更丑陋的方式来做 tantrix 下面的答案。
-
@tadman “丑陋”是相对的。
kind_of?允许签入一行:puts "URL exists: #{url}" if response.kind_of? Net::HTTPOK。