2017-02-08 47 views
0

我正在尋找一種方法來檢查使用HTTParty請求之前,API URL是否存在。目前,如果該URL不存在,則HTTParty請求錯誤。Rails如何檢查API請求URL之前拉

我試過下面這Check if URL exists in Ruby

api_url = "http://api.meetup.com/LA-Computer-Science-Reading-Group/events?photo-host=public&page=20&sig_id=215634693&sig=0be729af948c1a17ce5f35faa9fcedd5ae22de56" 
require "net/http" 
url_request = URI.parse(api_url) 
req = Net::HTTP.new(url_request.host, url_request.port) 
res = req.request_head(url_request.path) 

@check = res 

response = HTTParty.get(api_url) 

觀點:

<%= @check.inspect %> 
#<Net::HTTPOK 200 OK readbody=true> 

但是,如果我改變URL的東西不存在,如:

http://api.meeeeeetup.com/LA-Computer-Science-Reading-Group/events?photo-host=public&page=20&sig_id=215634693&sig=0be729af948c1a17ce5f35faa9fcedd5ae22de56` 

的頁面仍然有錯誤getaddrinfo: nodename nor servname provided, or not known

此外,URL請求我想檢查是一個XML請求:

http://api.indeed.com/ads/apisearch?publisher=#{publisher_key}&q=java&l=austin%2C+tx&sort=&radius=&st=&jt=&start=&limit=&fromage=&filter=&latlong=1&co=us&chnl=&userip=&useragent=&v=2 

和使用上面的想法,這個API URL不返回成功調用。相反,它返回一個#<Net::HTTPMethodNotAllowed 405 Method Not Allowed readbody=true>

我不確定模擬瀏覽器檢查結果的方式,或者有更簡單的方法來檢查HTTP URL請求之前的API URL請求的有效性。

+1

爲什麼不能簡單地做出請求,並失敗,如果無效的網址? –

+0

@Joel_Blum我發現如果我將無效的URL傳遞給HTTParty,它只會出現'getaddrinfo:nodename或服務名提供或未知的錯誤'並且會中斷應用程序。我不確定如何捕獲該錯誤,或​​者HTTParty是否有辦法在失敗前檢查URL響應。 – teresa

+1

您可以檢查URL的有效性;這與確保端點*存在*不同。但是,您的「無效」網址示例不是無效的網址,它只是不存在。 http://stackoverflow.com/a/26768085/438992 –

回答

0

感謝@Dave Newton從評論我能夠得到檢查工作。我也編輯了我的問題,以反映這不是關於URL的「有效性」。但它是這個URL不存在。

根據:How can I handle errors with HTTParty?

解決方案:

begin 
    response = HTTParty.get(url) 
rescue HTTParty::Error 
    # don´t do anything/whatever 
    puts "=========ERROR==============" 
rescue StandardError 
    # rescue instances of StandardError, 
    # i.e. Timeout::Error, SocketError etc 
    puts "=========STANDARD ERROR==============" 
end 

然後加入支票if !response.nil?,所以如果HTTParty請求返回錯誤。 response將是nil並且代碼塊將被忽略。