2012-02-12 72 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