2016-02-26 24 views
0

所以我想實現一個基本檢查是否存在輸入搜索框的URL的函數。我的應用程序接受URL並使用Net :: HTTP類向URL發送請求,並檢查HTTP狀態代碼是否爲200.使用Ruby的Net :: HTTP類檢查Rails中是否存在URL,但不適用於存在的某些URL

我的函數內部檢查URL是否存在的代碼基本上看起來是這樣的:

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

然後我檢查是否res.code是200,如果不是,那麼我的應用程序假定網址不存在,處理錯誤。

我正在處理分類廣告的網址,它對craigslist上的廣告起作用很好,例如 http://newyork.craigslist.org/brk/abo/5449483116.html給了我一個200狀態代碼。

然而,對於存在如客齊集任何廣告(或eBay分類廣告都被eBay運行): http://www.kijiji.ca/v-hand-tool/city-of-toronto/auger-style-flex-installer-bit-for-wood/1129757133 它不斷給我一個500錯誤代碼,意思是有一個內部服務器錯誤。

有沒有人有什麼問題的建議?

回答

0

這可能僅僅是因爲你想要的服務器並沒有明確處理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) 

這將返回

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

謝謝,現在工作正常 – PCR

0

這個網址對我來說工作得很好。沒有嘗試過你的方式,但這裏是使用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