到目前为止,我已经能够拼凑这个:)
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)
但是如何读取我要调用的服务的输出?
doc = open("http://etc..")
content = doc.read
Run Code Online (Sandbox Code Playgroud)
更常见的是,人们希望能够解析返回的文档,因此使用类似hpricot或nokogiri的东西
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)