首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用open-uri处理503错误?

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

Stack Overflow用户
提问于 2013-09-05 19:05:59
回答 1查看 13.7K关注 0票数 29

如果一个网站返回一个'503服务不可用‘的错误,那么open-uri就会抛出一个异常。例如:

代码语言:javascript
复制
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
# ...

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-05 19:38:41

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

代码语言:javascript
复制
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模块可能是更好的替代方案:

代码语言:javascript
复制
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; ...
票数 54
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18634684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档