【问题标题】:Post and redirect to external site from Rails controller?从 Rails 控制器发布并重定向到外部站点?
【发布时间】:2012-05-16 08:16:09
【问题描述】:

在用户注册页面之后,网络客户端会来到这个页面,这个页面只包含一个继续按钮。但我想跳过此页面并继续付款页面。有什么办法可以完全在控制器中执行此操作?

<form method="post" action="https://www.ccavenue.com/shopzone/cc_details.jsp">
    <input type=hidden name=Merchant_Id value="<%= @Merchant_id %>">
    <input type=hidden name=Amount value="<%= @Amount %>">
    <input type=hidden name=Order_Id value="<%= @user_id %>">
    <input type=hidden name=Redirect_Url value="<%= @redirect_url %>">
    <input type=hidden name=Checksum value="<%= @checksum %>">
    <input type="submit" class="Register_button" value="Proceed to payment">
</form>

【问题讨论】:

    标签: html ruby-on-rails http-post


    【解决方案1】:

    您应该向控制器发出 POST 请求。

    uri = URI.parse("https://www.ccavenue.com/shopzone/cc_details.jsp")
    http = Net::HTTP.new(uri.host, uri.port)
    
    form_data = {
      "Merchant_Id" => @Merchant_id,
      "Amount" => @Amount,
      "Order_Id" => @user_id,
      "Redirect_Url" => @redirect_url,
      "Checksum" => @checksum
    }
    
    request = Net::HTTP::Post.new(uri.request_uri)
    request.set_form_data(form_data)
    
    response = http.request(request)
    

    你可以使用httparty gem 来做post请求。

    【讨论】:

    • 嘿德米里奇!!感谢您的回复,我希望页面使用参数重定向到指定的 URL!通过使用 POST 请求,我只能发送参数并有响应。但是,重定向没有发生。
    • 嗨@Aahlad!你能解决问题吗?我正在尝试解决同样的问题。谢谢!
    【解决方案2】:

    不,不是你想要的方式。

    正如其他人所说,您可以从控制器内部发布并接收响应,但如果您想让浏览器发布到远程页面,则必须通过表单。一个常见的解决方案是通过 javascript 在加载时提交表单。例如

    <body onload="document.forms['myform'].submit();">
        <form id="myform">
            …
        </form>
    </body>
    

    【讨论】:

      【解决方案3】:

      这可能是几年后的回应,但如果有人还在寻找,我发现这个Repost plugin 可以实现这种行为。

      可以像控制器中的普通redirect_to 方法一样使用。

      redirect_post('https://external-url.io/endpoint', params: {...})
      

      【讨论】:

      • 我非常感谢这个问题的更新答案,因为多年来 RoR 发生了很大变化。我能够按照您的建议使用转发 gem,它非常适合我的需求。谢谢@Odeth A。
      【解决方案4】:

      您没有理由不能使用 Ruby 标准库中的 uri 和 net/http 从控制器发布并处理来自那里的服务器的响应。

      可以在这里找到一些使用 net/http 的好例子。 https://github.com/augustl/net-http-cheat-sheet/blob/master/post_form.rb

      但这可能不是处理这个问题的最佳方法。

      【讨论】:

        猜你喜欢
        • 2012-01-27
        • 1970-01-01
        • 1970-01-01
        • 2010-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-02
        • 1970-01-01
        相关资源
        最近更新 更多