3

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

是否有允许 Ruby 使用的库?

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

4

3 回答 3

7

这似乎在文档中说明得不够清楚,但是 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
于 2012-10-22T22:27:32.700 回答
4

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'

于 2012-10-22T22:35:43.847 回答
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中选择一个你喜欢的

于 2012-10-22T22:39:15.440 回答