2017-02-08 2 views
0

HTTPartyを使用してリクエストを行う前にAPI URLが存在するかどうかを確認する方法を探しています。現在、URLが存在しない場合、HTTParty要求エラー。Railsどのようにプルする前にAPIリクエストのURLを確認する

私はこのCheck if URL exists in Ruby次試してみました:私は存在しないものにURLを変更した場合など、

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

:しかし

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

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) 

ビューをページ静止エラー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>を返します。

ブラウザをエミュレートして結果を確認したり、HTTPartyリクエストの前にAPI URLリクエストの正当性を確認する方法が簡単でないかどうかはわかりません。

+1

なぜ簡単にリクエストを行い、無効なURLが見つからないのですか? –

+0

@Joel_Blum HTTPartyの無効なURLを渡すと、getaddrinfo:nodenameもservnameが指定されていない、または知られていないとエラーが発生し、アプリケーションが中断されます。私はどのようにそのエラーをキャッチするか、HTTPartyが失敗する前にURL応答をチェックする方法があるかどうかはわかりません。 – teresa

+1

URLの正当性を確認できます。エンドポイントが存在することを確認することとは異なります*。しかし、あなたの「無効な」URLの例は無効なURLではなく、単に存在しません。 http://stackoverflow.com/a/26768085/438992 –

答えて

0

コメントから@Dave Newtonのおかげで、私は小切手を働かせることができました。また、URLの「有効性」に関するものではないことを反映するように質問を編集しました。しかし、それはURLが存在しないということでした。

ベース:How can I handle errors with HTTParty?

ソリューション: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?を追加しました。 responsenilとなり、コードブロックは無視されます。

関連する問題