【问题标题】:Post XML to an external API - Using cURL in Rails将 XML 发布到外部 API - 在 Rails 中使用 cURL
【发布时间】:2012-03-03 23:35:23
【问题描述】:

我一直在使用 Rails 3.2 在 Rails 控制台中工作,并且正在使用 Nokogiri 生成 XML 文件。从这里,我需要发布到外部 API 以获取一些数据并将其返回到我的应用程序中。最终这段代码将成为控制器的功能,但目前我一直在控制台中进行试验。

我使用 Nokogiri 和指定的参数生成 XML 文件,并使用以下命令存储输出:

File.open('results.xml', 'w') {|f| f.write(results)}

从这里,我想将此文件发布到外部 API。我使用的命令将其保存在我的应用程序的 /public 目录中。从这里开始,我不确定如何使用 cURL 访问它。

我尝试将它放在一个视图目录中并设置一个路由,以便我可以获取该文件,并且我至少可以访问它。这是我在 cURL 中尝试的(注意当时 Rails 服务器正在运行,下面的 API 路径是出于示例目的而组成的):

curl -X POST -v --data-ascii http://localhost:3000/search/postresults.xml http://APIPATH/example.php

这个让我沮丧了一段时间,当我尝试时,我得到一个错误提示:

SyntaxError: (irb):5: syntax error, unexpected tCONSTANT, expecting keyword_do or '{'  or '('
curl -X POST -v --data-ascii http://local...
        ^
(irb):5: syntax error, unexpected tUMINUS, expecting keyword_do or '{' or '('
curl -X POST -v --data-ascii http://localhost:...
             ^
(irb):5: syntax error, unexpected tLABEL, expecting keyword_do or '{' or '('
...l 
-X POST -v --data-ascii http://localhost:3000/search/postr...
...                               ^
(irb):5: unknown regexp options - lcalht

我已经尝试了所有标准故障排除方法(已安装 curl - 版本 0.0.9,服务器正在运行,curl 在我的 Gemfile 中等),因此非常感谢任何帮助。谢谢!

【问题讨论】:

    标签: ruby-on-rails xml api post curl


    【解决方案1】:

    您的错误表明您将curl 命令和参数直接输入到IRb。这不是 Ruby gems 的工作方式。此外,如果您想从 Rails 发布到 HTTP 资源,请不要使用 cURL。 Rails 为此提供了内置工具。

    如果您要与此 API 进行大量交互,并且该 API 是相当 RESTy 的,那么请查看ActiveResource(如果文档不适合您,Google 上的教程比比皆是)。

    如果您没有使用非常 RESTy 的 API,或者这是一次性 API 调用,您可以直接创建 ActiveResource::Connection 的实例,例如:

    conn = ActiveResource::Connection.new 'http://example.com'
    
    result = conn.post 'example.php', results
    

    可能不需要将 Nokogiri 文档 (results) 写入文件,只需将其直接提供给 ActiveResource::Connection#post

    【讨论】:

    • 非常感谢,这正是我想要的!我没有在 Rails 中使用 cURL,所以我尽我所能。我正在使用的 API 完全是一团糟,而且绝对不是 RESTful,所以我使用了 ActiveResource::Connection。
    • 如果您喜欢 Gems,请查看 HTTParty。您还可以将您的 api 调用包装在 ActiveModel 中并实现许多 ActiveRecord 功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多