我正在寻找一种在使用HTTParty发出请求之前检查API URL是否存在的方法。目前,如果URL不存在,则HTTParty请求错误。
我尝试了这个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网址不会返回成功的调用。而是返回#<Net::HTTPMethodNotAllowed 405 Method Not Allowed readbody=true>
。
我不确定是否模仿浏览器以检查结果,或者在HTTParty请求之前是否有更简单的方法来检查API URL请求的有效性。
答案 0 :(得分: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
,代码块将被忽略。