如何在PHP中模拟POST请求

时间:2015-04-25 10:04:35

标签: php curl

我正在处理一个处理信用卡的脚本,处理付款的公司会检查邮件请求的用户IP,国家等。

假设我有以下表格:

<form method="post" action="http://payment-processing-company.com/process_payment.php">
<input type="text" name="card_holder" value="John Doe">
<input type="text" name="creditcard_number" value="65415461171">
<input type="text" name="vcc" value="123">
<input type="text" name="exp_date" value="15/02/2017">
<input type="submit" value="Send">
</form>

在上面的示例中,用户直接向http://payment-processing-company.com/process_payment.php发出POST操作请求以处理付款,而pay-processing-company.com将获取他的IP,国家/地区等。

我想要的是在php文件中模拟POST请求 action =&#34; http://payment-processing-company.com/process_payment.php" ,当用户按下时提交按钮用他真正的IP,国家模拟。

请不要推荐任何javascript / ajax提交。我想要的是从源代码中隐藏动作POST动作URL并在用户按下PHP文件中的提交按钮时处理它,所有这些都是他的真实IP,国家等等。模拟全部用PHP

3 个答案:

答案 0 :(得分:5)

快速方法是使用curl命令

curl --data "card_holder=value1&creditcard_number=value2" http://payment-processing-company.com/process_payment.php

另一种方法是使用Chrome扩展程序,例如Postman - REST Client

答案 1 :(得分:1)

您可以使用cURL从PHP发送POST请求:

$ch = curl_init();
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
$params = array(
    "card_holder"=>"a",
    "creditcard_number"=>"b",
    "vcc"=>"c",
    "exp_date"=>"d",
);
curl_setopt($ch,CURLOPT_URL,"http://paymentprocessingcompany.com/process_payment.php");
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,http_build_query($params));
$result = curl_exec($ch);
//result will contain the response

答案 2 :(得分:1)

要建立与远程(付款)服务器的连接,您需要完成three-way TCP handshake。当服务器响应远程服务器返回的序列号时,握手完成。即使你设法spoof the original users IP address,这个序列号也会被发送回那个的IP地址而不是你的服务器。

虽然过去已经证明guessing the remote servers sequence numbers可能会欺骗IP地址,但由于此错误已于多年前修复,因此今天不太可行。

所以不,你不能欺骗服务器上运行的任何东西的用户IP地址。如果您需要使用用户IP地址,则必须在用户计算机上执行表单操作,例如。使用Javascript。

,您可以与付款服务联系,了解您是否可以将IP地址,国家/地区等作为服务器POST请求中的附加参数传递。