在HTML中,我们可以创建一个表单并输入输入数据,然后将其作为POST发送到某个目的地;这意味着我们在同一时间发送和重定向,目的地检测两者是同一个东西。我想用cURL做同样的事情;意味着当我使用cURL发布数据时,我应该能够使用header()之类的方式重定向,并且目标的行为类似于使用HTML表单定期完成的过程。
可能吗?!
答案 0 :(得分:4)
是的,您可以使用以下选项让cURL跟踪重定向:
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
来自Manual:
<强> CURLOPT_FOLLOWLOCATION 强>
TRUE以跟随服务器作为HTTP标头的一部分发送的任何“Location:”标头(注意这是递归的,PHP将跟随它发送的“Location:”标头,除非设置了CURLOPT_MAXREDIRS)。 / p>
答案 1 :(得分:0)
我相信你想做的事情是这样的:
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,即使它不是银行,does,WorldPay也是如此。
一种可能的工作流程是将所有数据发送到银行,银行以唯一ID进行响应。然后,您可以自己显示所有信息,或者(银行更喜欢)银行向客户显示信息,当您使用特殊网址和重定向时ID。
客户可以更改其表单中的数据 - 但他获得的所有内容都是中止交易,因为两个数据副本不再一致,并且他无法触及您发送的副本(当然存在其他方法和工作流程)。
如果您的系统根据此工作流程(或类似工作)运行并使用银行自己的API和建议的做法,请忽略并接受我的道歉:您做得对。但是,万一你不是,好吧,请考虑一下。
尝试使用cURL创建自定义工作流程可能是可行的(对于某些银行来说,肯定可能),但它可疑地接近rolling your own cryptography,可能会受到较少的支持银行,并可能触发银行的一些异常检测器(只是引用一个,许多付款似乎来自相同的IP地址或范围)。