Ruby 需要进行HTTP呼叫以发送电子邮件并获得响应

Ruby 需要进行HTTP呼叫以发送电子邮件并获得响应,ruby,xml,parsing,rest,sinatra,Ruby,Xml,Parsing,Rest,Sinatra,我正在编写一个Sinatra应用程序,它将使用SendGrid发送电子邮件。他们提供了一个用于发送电子邮件的RESTAPI,我想找到调用该API并获得响应的最佳方法 电话的格式为: https://sendgrid.com/api/mail.send.xml?api_user=youremail@domain.com&api_key=secureSecret&to=destination@example.com&toname=Destination&subject

我正在编写一个Sinatra应用程序,它将使用SendGrid发送电子邮件。他们提供了一个用于发送电子邮件的RESTAPI,我想找到调用该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格式的,我需要解析它以检查成功/失败。更多信息请访问


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

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

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


每种主要语言都有许多XML解析器,所以这一部分应该很好。

Ruby的内置Net::HTTP库功能强大,但我喜欢它,因为它有一套很好的语法。如果你不需要做很多繁重的工作,内置的也非常方便

对于解析HTML和XML,这真的很难击败

Ruby有一个名为URI内置的URL解析器,但我更喜欢它,特别是当我要经常处理查询参数时

以下是使用各种宝石的一些示例:

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\u values=
重新分配它们

如果您想要一个比HTTPClient更简单的接口,Ruby的开放URI就和它们一样简单。这将向url发送一个请求,并将结果返回给Nokogiri以进行XML解析:

doc = Nokogiri::XML(open(uri.to_s))
根据您链接到的站点,返回的XML响应如下所示:

returned_xml = '<result>
  <message>success</message>
</result>'
我们可以很容易地得到回应:

doc.at('message').inner_text # => "success"

我无法显示完整的往返示例,因为我在那里没有帐户,但这应该会让您感到满意。

对不起,我忘了说我正在构建应用程序的内容。我用更多的信息更新了帖子
doc.at('message').inner_text # => "success"