【问题标题】:PHP Post & Redirect with cURL Same As HTML Form [closed]使用 cURL 的 PHP 发布和重定向与 HTML 表单相同 [关闭]
【发布时间】:2013-06-13 10:49:24
【问题描述】:

在 HTML 中,我们可以创建一个表单并放入输入数据,然后将其作为 POST 发送到某个目的地;这意味着我们同时发送和重定向,而目的地将两者检测为同一事物。我想用 cURL 做同样的事情;意味着当我使用 cURL 发布数据时,我应该能够使用诸如 header() 之类的东西进行重定向,并且目标的行为就像使用 HTML 表单定期完成的过程一样。

有可能吗?!

【问题讨论】:

    标签: php post curl


    【解决方案1】:

    是的,您可以使用以下选项让 cURL 跟随重定向:

    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    

    来自Manual

    CURLOPT_FOLLOWLOCATION

    TRUE 后跟服务器作为 HTTP 标头一部分发送的任何“Location:”标头(注意这是递归的,PHP 将跟随着它发送的尽可能多的“Location:”标头,除非设置了 CURLOPT_MAXREDIRS)。

    【讨论】:

    • 我以前看到过,但我不确定它实际上是做什么的......非常感谢......
    • 对不起,但我认为启用此选项意味着该功能将能够跟踪目标服务器的 url 重定向,不是吗?!如果是这样,它不会再解决我的问题了......
    • 我不确定你在说什么。如果您使用此选项发出 curl 请求,则将遵循目标的任何重定向。
    【解决方案2】:

    我相信你想做的事情是这样的:

    Client --> Server A
    
               Server A --> POST --> Server B
    
    Client <------------------------ Server B
    

    这样,例如,客户端可以在不知道服务器 A 知道的密码的情况下登录服务器 B。

    如果是这样,你可以做一些类似的事情,但不是完全你想要的(可能类似于 OpenID,不过,并且可以用 OpenID 解决)。

    您可以让服务器 A 进行 POST 并接收答案,然后将答案发送给客户端。不幸的是,您可能无法设置 cookie(它们对 A 子域有效,并且不会再发送到服务器 B)并且会话可能由于类似原因而无法工作。

    可能可以让服务器 A 作为一个完整的代理工作:请参阅此答案 How can I scrape website content in PHP from a website that requires a cookie login?

    支付网关

    大多数银行都有 API 可以做到这一点(Paypal,即使它不是银行,doesWorldPay 也是如此)。

    一种可能的工作流程是将所有数据发送到银行,银行会使用唯一 ID 进行响应。然后,您要么自己显示所有信息,要么(银行更喜欢)银行向客户显示信息,当你使用特殊的 URL 唯一的 URL 重定向他们时身份证。

    客户可以更改他的表单中的数据——但他得到的只是中止交易,因为两个数据副本不再一致,他无法触摸发送的副本(当然还有其他方法和工作流程)。

    如果您的系统按照此工作流程(或类似工作流程)运行并使用银行自己的 API 和建议的做法,请忽略并接受我的道歉:您做得对。但以防万一你不是,好吧,请三思而后行。

    尝试使用 cURL 制作自定义工作流程也许是可能的(对于某些银行来说,绝对可能),但它可能与 rolling your own cryptography 很接近,银行可能不太支持,并且可能会触发银行方面的一些异常检测器(仅举一个例子,许多付款似乎来自相同的 IP 地址或范围)。

    【讨论】:

    • 实际上我正在编写一个支付网关模块,我将通过 HTTP POST 传递变量并将用户重定向到银行网址。我已经通过创建第二个 PHP 文件来做到这一点,该文件包含一个 HTML 表单和一个自动提交表单的 javascript。但是现在为了提高安全性,我不想使用相同的方式并提供一种客户端可以读取源并获取数据的表单。我以为我可以使用cURL然后以某种方式重定向,所以没有数据输出,所有事情都在PHP端完成。
    猜你喜欢
    • 2015-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 2016-11-11
    • 2015-12-05
    • 2021-02-13
    相关资源
    最近更新 更多