使用 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>
所以我想实现一个功能,基本上检查是否存在在搜索框中输入的 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>