如何通过http访问带有Ruby的URL并读取输出?

Gee*_*Out 6 ruby http

到目前为止,我已经能够拼凑这个:)

 begin
  open("http://www.somemain.com/" + path + "/" + blah)
 rescue OpenURI::HTTPError
   @failure += painting.permalink
 else
   @success += painting.permalink
 end
Run Code Online (Sandbox Code Playgroud)

但是如何读取我要调用的服务的输出?

sma*_*thy 6

doc = open("http://etc..")
content = doc.read
Run Code Online (Sandbox Code Playgroud)

更常见的是,人们希望能够解析返回的文档,因此使用类似hpricotnokogiri的东西


the*_*Man 6

Open-URI扩展open,因此您将获得一种返回的IO流:

open('http://www.example.com') #=> #<StringIO:0x00000100977420>
Run Code Online (Sandbox Code Playgroud)

您必须阅读以获取内容:

open('http://www.example.com').read[0 .. 10] #=> "<!DOCTYPE h"
Run Code Online (Sandbox Code Playgroud)

很多时候,方法会让您将不同类型作为参数传递.他们检查它是什么,并在字符串的情况下直接使用内容,或者如果它是流,则读取句柄.

对于HTML和XML,例如RSS提要,我们通常会将句柄传递给解析器,让它抓取内容,解析它,并返回一个适合进一步搜索的对象:

require 'nokogiri'
doc = Nokogiri::HTML(open('http://www.example.com'))
doc.class #=> Nokogiri::HTML::Document
doc.to_html[0 .. 10] #=> "<!DOCTYPE h"
doc.at('h1').text #=> "Example Domains"
Run Code Online (Sandbox Code Playgroud)