2011-01-20 87 views
3

我想知道如何通過HTTP POST請求發送和接收信息。如何在Rails中讀取POST信息?

我使用Ruby v.1.8.7和軌道v.2.3.8。

編輯:

我的動作的代碼如下:

require 'net/http' 

# get the url that we need to post to 
url = URI.parse('http://localhost:3000/ipn/payments') 

xml_notificaciones = "<NOTIFICACION><TIPONOTIFICACION>1</TIPONOTIFICACION><OPERACIONES><OPERACION><TIPO>1</TIPO><ID>31548</ID></OPERACION><OPERACION><TIPO>1</TIPO><ID>XA5547</ID></OPEARACION></OPERACIONES></NOTIFICACION>" 

# build the params string 
post_args1 = { 'NOTIFICACION' => xml_notificaciones } 
# send the request 
resp, data = Net::HTTP.post_form(url, post_args1) 

當我執行上面的代碼,頁面會一會加載,直到我得到execution expired消息。

但事實上我對http://localhost:3000/ipn/payments URL一個路由條目,如下:

map.received_ipn_payments '/ipn/payments', :controller => 'payments', :action => 'parse_received_data', :method => :post 

我有一個raise params.inspect所以我知道什麼時候它的工作原理,但沒有那麼遠,

+0

你的問題是有點曖昧 - 你的意思是你希望你的Rails應用程序,以便能夠從瀏覽器,而是從外部Web服務發送和接收HTTP請求,想必不是? – vonconrad 2011-01-20 00:46:38

+0

嗯,我會從付款方式的公司收到一些數據,這些數據將通過POST提供給我一個XML,以便我可以解析和閱讀購買。讀完之後,他們要求我的應用程序通過POST向他們發送請求,所以這就是爲什麼我需要發送和接收數據。 – 2011-01-20 00:59:43

回答

2

你們是不是要張貼到您的控制器之一相同的Rails應用程序?如果您在單個webrick/mongrel實例上運行此操作,則只能處理一個請求。因此,如果您從瀏覽器向您的應用程序發出請求,並且此請求需要向同一個應用程序發出另一個請求(這將阻止第一個應用程序),則它會卡住並超時。

我不知道爲什麼你需要你的控制器做了第二次請求,在我看來,你需要在另一個控制器/動作運行代碼。您可以重定向到其他控制器/操作,但需要GET請求,或者將代碼從控制器移到模型或模塊,並從兩個控制器操作中調用適當的方法。

編輯: 如果您試圖測試您的付款處理器集成,您應該使用他們的測試環境(假設他們有一個),而不是在應用程序中模擬它。如果您確實需要編寫代碼來模擬付款流程,那麼您應該在運行其自己的webrick/mongrel實例的其他應用程序中執行此操作。然後你就可以向其他應用程序發出請求。

1

接收一個帖子請求你只需要在控制器中創建一個動作,並用method post設置路由。

送您可以使用類似

require 'net/http' 
# get the url that we need to post to 
url = URI.parse('http://www.url.com/subscribe')# build the params string 
post_args1 = { 'email' => params[:email] } 
# send the request 
resp, data = Net::HTTP.post_form(url, post_args1) 
+0

我試過這個,但它一直加載頁面一段時間,直到它說「執行過期」,你知道爲什麼嗎?我將用我的代碼編輯帖子。 – 2011-01-20 01:50:29

+0

也許,如果您發佈的代碼位於操作「parse_received_data」中,那麼您的操作會導致回調本身導致循環。在URI.parse('http:// localhost:3000/ipn/payments')中更改URI。對不起,如果我誤解了。 – andrea 2011-01-20 02:33:17

2

東西收到請求到應用程序中,設置了路線config/routes.rb它的請求。有關更多信息,請參見Routing Guide。將其路由到控制器,然後通過使用params方法訪問發送的信息。

至於發回的數據...替代安德烈的回答,您可以使用Typhoeus寶石,使HTTP請求。它有一個非常整齊的語法,我最近一直在使用它,不用擔心。