Ruby 内置的 Net::HTTP 库功能强大,但我喜欢 HTTPClient,因为它有一组不错的 simplified commands。如果您不需要做太多繁重的工作,内置的open-uri 也非常方便。
对于解析 HTML 和 XML,真的很难击败Nokogiri。
Ruby 内置了一个名为 URI 的 URL 解析器,但我更喜欢 Addressable,尤其是当我要经常弄乱查询参数时。
以下是使用各种宝石的一些示例:
require 'addressable/uri'
require 'nokogiri'
require 'open-uri'
如果您想轻松操作查询参数,那么 Addressable::URI 会很方便:
url = 'https://sendgrid.com/api/mail.send.xml?api_user=youremail@domain.com&api_key=secureSecret&to=destination@example.com&toname=Destination&subject=Example%20Subject&text=testingtextbody&from=info@domain.com'
uri = Addressable::URI.parse(url)
uri.query_values # => {"api_user"=>"youremail@domain.com", "api_key"=>"secureSecret", "to"=>"destination@example.com", "toname"=>"Destination", "subject"=>"Example Subject", "text"=>"testingtextbody", "from"=>"info@domain.com"}
您可以将该哈希分配给一个变量,修改值,然后使用uri.query_values= 重新分配它们。
如果您想要一个比 HTTPClient 更简单的接口,Ruby 的 Open-URI 就非常简单。这将向 url 发送请求,将结果返回给 Nokogiri 以解析为 XML:
doc = Nokogiri::XML(open(uri.to_s))
根据您链接到的站点,返回的 XML 响应看起来像这样:
returned_xml = '<result>
<message>success</message>
</result>'
所以,如果我们解析:
doc = Nokogiri::XML(returned_xml)
我们可以很容易地得到响应:
doc.at('message').inner_text # => "success"
我无法显示完整的往返示例,因为我在那里没有帐户,但这应该会让您滚动。