gpt4 book ai didi

ruby - 在 RoR 中,如果我没有得到服务器的响应,我该如何捕获异常?

转载 作者:数据小太阳 更新时间:2023-10-29 07:44:51 25 4
gpt4 key购买 nike

我正在使用 Rails 4.2.3 和 Nokogiri 从网站获取数据。我想在没有收到服务器的任何响应时执行一个操作,所以我有:

begin
content = open(url).read
if content.lstrip[0] == '<'
doc = Nokogiri::HTML(content)
else
begin
json = JSON.parse(content)
rescue JSON::ParserError => e
content
end
end
rescue Net::OpenTimeout => e
attempts = attempts + 1
if attempts <= max_attempts
sleep(3)
retry
end
end

请注意,这与从服务器获取 500 不同。我只想在完全没有响应时重试,要么是因为我没有 TCP 连接,要么是因为服务器无法响应(或者其他一些导致我得不到任何响应的原因)。除了我的情况,是否有更通用的方法来考虑这种情况?我觉得还有很多我没有想到的其他异常类型。

最佳答案

这是一个通用示例,您可以定义 HTTP 连接的超时持续时间,并在获取内容时发生任何错误时执行多次重试(已编辑)

require 'open-uri'
require 'nokogiri'

url = "http://localhost:3000/r503"

openuri_params = {
# set timeout durations for HTTP connection
# default values for open_timeout and read_timeout is 60 seconds
:open_timeout => 1,
:read_timeout => 1,
}

attempt_count = 0
max_attempts = 3
begin
attempt_count += 1
puts "attempt ##{attempt_count}"
content = open(url, openuri_params).read
rescue OpenURI::HTTPError => e
# it's 404, etc. (do nothing)
rescue SocketError, Net::ReadTimeout => e
# server can't be reached or doesn't send any respones
puts "error: #{e}"
sleep 3
retry if attempt_count < max_attempts
else
# connection was successful,
# content is fetched,
# so here we can parse content with Nokogiri,
# or call a helper method, etc.
doc = Nokogiri::HTML(content)
p doc
end

关于ruby - 在 RoR 中,如果我没有得到服务器的响应,我该如何捕获异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38384668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com