Rails如何在拉

时间:2017-02-08 19:14:13

标签: ruby-on-rails ruby url

我正在寻找一种在使用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请求的有效性。

1 个答案:

答案 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,代码块将被忽略。