【问题标题】:Need to make an HTTP call to send email and get response需要进行 HTTP 调用以发送电子邮件并获得响应
【发布时间】:2011-02-08 05:28:30
【问题描述】:

我正在编写一个将使用 SendGrid 发送电子邮件的 Sinatra 应用程序。他们提供了一个用于发送电子邮件的 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

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

【问题讨论】:

    标签: ruby xml parsing rest sinatra


    【解决方案1】:

    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"
    

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

    【讨论】:

      【解决方案2】:

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

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

      每种主要语言都有很多 XML 解析器,所以那部分应该没问题。

      【讨论】:

      • 抱歉,忘了说我在用什么构建应用程序。我更新了帖子以提供更多信息
      猜你喜欢
      • 1970-01-01
      • 2019-10-19
      • 2014-03-06
      • 1970-01-01
      • 1970-01-01
      • 2011-12-24
      • 2011-02-11
      • 1970-01-01
      • 2011-07-11
      相关资源
      最近更新 更多