需要进行HTTP调用以发送电子邮件并获得响应

时间:2011-02-08 05:28:30

标签: ruby xml parsing rest sinatra

我正在编写一个Sinatra应用程序,它将使用SendGrid发送电子邮件。他们提供了一个用于发送电子邮件的REST API,我想找出调用该API并获得响应的最佳方式。

通话的格式为:

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

响应是XML格式,我需要解析它以检查是否成功。有关详情,请访问http://sendgrid.com/documentation/ApiWebMail

完成调用和解析返回的最佳方法是什么?

2 个答案:

答案 0 :(得分:5)

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"

我无法展示一个完整的往返示例,因为我没有帐户,但这应该让你滚动。

答案 1 :(得分:0)

答案真的取决于你。你想用什么语言?哪些框架(如果有的话)对您有吸引力?如果您想以一次性方式执行此操作,可以使用命令行中的CURL完成整个操作。或者您可以将CURL包装在Perl脚本中。或者你可以编写Python或Ruby。或者你可以写Java或.Net。

或者您可以在填写相应的查询字符串参数后在浏览器中点击该URL。

每种主要语言都有许多XML解析器,因此该部分应该没问题。