【问题标题】:Getting the contents of a 404 error page response ruby获取 404 错误页面响应 ruby​​ 的内容
【发布时间】:2012-10-12 19:17:33
【问题描述】:

我知道有些语言有一个库,可让您获取 404 或 500 消息的 HTTP 内容。

是否有允许 Ruby 使用的库?

我试过 open-uri,但它只是返回一个 HTTPError 异常,没有 404 响应的 HTML 内容。

【问题讨论】:

    标签: ruby nokogiri open-uri


    【解决方案1】:

    这似乎在文档中表述得不够清楚,但是 HttpError 有一个 io 属性,据我所知,您可以将其视为只读文件。

    require 'open-uri'
    
    begin
      response = open('http://google.com/blahblah')
    rescue => e
      puts e # Error message
      puts e.io.status # Http Error code
      puts e.io.readlines # Http response body
    end
    

    【讨论】:

    • 甜蜜!正是我想要的。我希望他们将其包含在文档中。我在那里检查并没有找到这个信息(确实找到了关于状态和代码的信息)
    【解决方案2】:

    Net::HTTP 支持您的需求。

    您可以使用 request_get 方法,无论状态码如何,它都会返回响应。

    来自脚本/控制台:

    > http = Net::HTTP.new('localhost', 3000)
    => #<Net::HTTP localhost:3000 open=false>
    > resp = http.request_get('/foo') # a page that doesn't exist
    => #<Net::HTTPNotFound 404 Not Found readbody=true>
    > resp.code
    => "404"
    > resp.body
    => "<html>...</html>"
    

    (如果默认情况下您无法使用该库,您可以使用require 'net/http'

    【讨论】:

    • 甜蜜。谢谢尼克!看起来 Open-uri 是 Net::HTTP 的包装器,以使事情变得更简单。非常感谢您的帮助。
    【解决方案3】:

    也适用于 HTTParty https://github.com/jnunemaker/httparty

    require 'rubygems'
    require 'httparty'
    
    HTTParty.get("http://google.com/blahblah").parsed_response
    

    有多种 HTTP 客户端可用,从https://www.ruby-toolbox.com/categories/http_clients 中选择您喜欢的一个

    【讨论】:

      猜你喜欢
      • 2011-11-24
      • 2019-04-07
      • 2013-07-23
      • 2021-08-12
      • 1970-01-01
      • 2013-04-18
      • 1970-01-01
      • 2021-09-07
      • 2010-10-19
      相关资源
      最近更新 更多