gpt4 book ai didi

ruby - 如何使用 open-uri 处理 503 错误?

转载 作者:数据小太阳 更新时间:2023-10-29 06:27:39 34 4
gpt4 key购买 nike

如果网站返回“503 服务不可用”错误,则 open-uri 会抛出异常。例如:

require 'open-uri'
open('http://www.google.co.uk/sorry/?continue=http://www.google.co.uk/search%3Fq%3Dhello%26oq%3Dhello%26ie%3DUTF-8')
# OpenURI::HTTPError: 503 Service Unavailable
# ...

但是,如果您随后在网络浏览器中访问它,它实际上会显示一个带有验证码的页面,而不是错误。

我如何确保 open-uri 不只是将此作为异常抛出,而是实际处理响应并为我提供页面内容?

最佳答案

OpenURI::HTTPError 有一个 io 属性,您可以检查它以获得您想要的内容。 io 是一个 StringIO 对象,上面定义了几个单例方法(例如 status):

require 'open-uri'
begin
open('http://www.google.co.uk/sorry/?continue=http://www.google.co.uk/search%3Fq%3Dhello%26oq%3Dhello%26ie%3DUTF-8')
rescue OpenURI::HTTPError => error
response = error.io
response.status
# => ["503", "Service Unavailable"]
response.string
# => <!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n<html DIR=\"LTR\">\n<head><meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\"><meta name=\"viewport\" content=\"initial-scale=1\">...
end

但是对于这个任务,Net::HTTP 模块可能是更好的选择:

require 'net/http'
response = Net::HTTP.get_response(URI.parse('http://www.google.co.uk/sorry/?continue=http://www.google.co.uk/search%3Fq%3Dhello%26oq%3Dhello%26ie%3DUTF-8'))
response.code
# => "503"
response.body
# => "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n<html DIR=\"LTR\">\n<head><meta http-equiv=\"content-type\" content=\"text/html; ...

关于ruby - 如何使用 open-uri 处理 503 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18634684/

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