我想知道如何通过HTTP POST请求发送和接收信息。
我正在使用Ruby v.1.8.7和rails 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 :(得分:2)
要在您的应用程序中接收请求,请在config/routes.rb
中为其设置路由。有关详细信息,请参阅Routing Guide。将其路由到控制器,然后使用params
方法访问发送的信息。
至于发送回数据...替代andrea的答案,您可以使用Typhoeus gem来发出HTTP请求。它有一个非常简洁的语法,我最近一直在使用它而不用担心。
答案 1 :(得分:2)
您是否尝试从其中一个控制器发布到相同的rails应用程序?如果您在单个webrick / mongrel实例上运行此操作,则只能处理一个请求。因此,如果您从浏览器向您的应用程序发出请求,并且此请求需要向同一个应用程序发出另一个请求(阻止第一个应用程序),那么它将会卡住并且只是超时。
我不确定为什么你需要你的控制器做第二次请求,在我看来你需要在另一个控制器/动作中运行代码。您可以重定向到其他控制器/操作,但这需要GET请求,或者将代码从控制器移动到模型或模块,并从控制器操作中调用适当的方法。
编辑: 如果您正在尝试测试您的支付处理器集成,您应该使用他们的测试环境(前提是他们有),而不是在您的应用程序中模拟它。如果您确实需要编写代码来模拟付款流程,则应该在运行在自己的webrick / mongrel实例上的其他应用程序中执行此操作。然后,您就可以向其他应用程序发出请求。
答案 2 :(得分:1)
接收发布请求,您只需在控制器中创建操作并使用方法发布设置路由。
发送请求你可以使用类似的东西
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)