使用 Ruby 的 Net::HTTP class 检查 Rails 中 URL 的存在性,不适用于某些存在的 URL

Checking existence of URL in Rails using Ruby's Net::HTTP class, not working for certain URLs that exist

所以我想实现一个功能,基本上检查是否存在在搜索框中输入的 URL。我的应用采用 URL 并使用 Net::HTTP class 向 URL 发送请求并检查 HTTP 状态代码是否为 200。

我的函数中检查 URL 是否存在的代码基本上如下所示:

url = URI.parse(input_url)
req = Net::HTTP.new(url.host, url.port)
res = req.request_head(url.path)

然后我检查 res.code 是否为 200,如果不是,那么我的应用会假定 URL 不存在并处理错误。

我正在处理 URL 的 class 化广告,例如,它非常适合 craigslist 上的广告 http://newyork.craigslist.org/brk/abo/5449483116.html 给我一个 200 状态码。

然而,对于 kijiji 上的任何广告(或 ebay classified both 运行 by ebay),例如: http://www.kijiji.ca/v-hand-tool/city-of-toronto/auger-style-flex-installer-bit-for-wood/1129757133 它一直给我一个 500 错误代码,这意味着存在内部服务器错误。

有人对出了什么问题有任何建议吗?

url 对我来说效果很好。没有按照您的方式尝试,但这是使用 httparty 的响应。返回 200.

 require 'httparty'

 input_url = 'http://www.kijiji.ca/v-hand-tool/city-of-toronto/auger-style-flex-installer-bit-for-wood/1129757133'

 response = HTTParty.get(input_url)

 p response.code

可能只是您尝试使用的服务器未明确处理 HEAD 请求。在大多数情况下,执行常规 GET 应该可行。例如

# url = "http://www.kijiji.ca/v-hand-tool/city-of-toronto/auger-style-flex-installer-bit-for-wood/1129757133"
url = URI.parse(input_url)
req = Net::HTTP.new(url.host, url.port)
res = req.request_get(url.path)

这将return

#<Net::HTTPOK 200 OK readbody=true>