2012-02-12 43 views
0

我一直在Rails 3.2中使用Rails控制台,并使用Nokogiri生成XML文件。从这里,我需要发布到外部API来获取一些数据并在我的应用程序中返回。最终这个代码将是控制器的功能,但现在我一直在控制台中进行试验。将XML发布到外部API - 在Rails中使用cURL

我生成并与引入nokogiri和我指定的参数的XML文件,我使用下面的命令存储输出:

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

从这里,我想张贴此文件到外部API。我使用的命令将其保存在我的应用程序的/ public目录中。从这里,我不确定如何用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 

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

回答

1

您的错误表明您将curl命令和参数直接键入IRb。这不是Ruby宝石的工作方式。此外,如果你想从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

+0

非常感谢,这就是我一直在寻找的!我没有在Rails中使用cURL,所以我尽力而为。我正在使用的API是一团糟,绝对不是很RESTful,所以我使用了ActiveResource :: Connection。 – ryan508 2012-02-12 06:32:06

+0

如果你进入Gems,请查看HTTParty。您也可以将您的api调用包装在ActiveModel中,并实现大量ActiveRecord功能。 – 2012-02-12 14:25:00