cURL未能完全模拟HTTP Post

时间:2016-04-19 22:37:59

标签: php email http post curl

我是一名旧学校的COBOL程序员,他越来越多地研究我网站/网页上PHP的使用情况。我已经学到了很多东西,但有一个新的挑战,CURL应该解决。

到目前为止,我还没有设法让我的代码按要求运行,所以我会尝试清楚地解释我想要它做什么并在下面显示示例。

我已经从互联网联属企业自己的捕获页面中提取了表单代码,以使其适合我自己的全屏视频捕获页面。基本上我在我的服务器上托管我的视频捕获页面,但表单与联盟业务的服务器交互 - 从而让我可以控制前端(我的服务器)的外观,但利用联盟的功能后端的业务(他们的服务器)。

此设置效果非常好,表单使用简单的HTTP帖子提交潜在客户详细信息,如下所示。

<form action="http://<?php displayID(""); ?>.affiliate-business.com/index#form" method="post" name="PRE">
<input name="ENROLLER" value="<?php displayID2(""); ?>" type="hidden">
<input name="SOURCE" value="<?php echo $_GET['SOURCE']; ?>" type="hidden">
<input name="ENROLLER_NAME" value="<?php displayID3(""); ?>" type="hidden">
<input name="PAGE" value="11" type="hidden">
<input name="LANGUAGE" value="en" type="hidden">
<input type="hidden" name="STP" value="save">
<input name="FNAME" size="36" maxlength="40" value="" type="text" placeholder="First Name" required><br><br>
<input name="LNAME" size="36" maxlength="40" value="" type="text" placeholder="Last Name" required><br><br>
<input name="EMAIL" size="36" maxlength="60" value="" type="text" placeholder="E-mail" required><br><br>
<input name="PHONE" size="36" maxlength="40" value="" type="text" placeholder="Phone (*Optional)"><br><br>
<input type="image" src="http://example-image.png" alt="Reserve My Position Now!">
</form>

这正确导致以下3个动作.. -1-通过电子邮件通知我订阅者(商家的服务器) -2-通过电子邮件欢迎订阅者并执行电子邮件后续系列(商业服务器) -3-立即将它们重定向到起始页面(业务的服务器)

好的,现在我想要聪明一点。

我不仅要将表单数据提交给联属网络营销服务器,还要在点击提交按钮时将自己的个人电子邮件发送给订阅的潜在客户。

所以我基本上想要一个提交按钮的两个动作。

我的解决方案是引入一个PHP文件来处理使用PHP邮件功能发送个人电子邮件以及使用CURL提交表单字段/数据。

以下是我的视频捕获页面中的HTTP表单代码以及操作的PHP文件中的后续PHP代码..

<form action="sbcmail.php" method="post" name="PRE">
<input name="ENROLLER" value="<?php displayID2(""); ?>" type="hidden">
<input name="SOURCE" value="<?php echo $_GET['SOURCE']; ?>" type="hidden">
<input name="ENROLLER_NAME" value="<?php displayID3(""); ?>" type="hidden">
<input name="PAGE" value="11" type="hidden">
<input name="LANGUAGE" value="en" type="hidden">
<input type="hidden" name="STP" value="save">
<input type="hidden" name="URL" value="http://<?php displayID(""); ?>.affiliate-business.com/index#form">
<input name="FNAME" size="36" maxlength="40" value="" type="text" placeholder="First Name" required><br><br>
<input name="LNAME" size="36" maxlength="40" value="" type="text" placeholder="Last Name" required><br><br>
<input name="EMAIL" size="36" maxlength="60" value="" type="text" placeholder="E-mail" required><br><br>
<input name="PHONE" size="36" maxlength="40" value="" type="text" placeholder="Phone (*Optional)"><br><br>
<input type="image" src="http://payspreesniper.com/sbc/reserve-my-position-now.png" alt="Reserve My Position Now!">
</form>

sbcmail.php:

$to = "to@email.com";
$subject = "SBC Opt-in";
$msg = "This is my message" . " " . $_POST["URL"];
$headers = "From: from@email.com" . "\r\n";
/* ."CC: cc@email.com";*/
mail($to,$subject,$msg,$headers);

$url = $_POST["URL"];
$ch = curl_init();
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
$params = array(
    "ENROLLER"=>$_POST["ENROLLER"],
    "SOURCE"=>$_POST["SOURCE"],
    "ENROLLER_NAME"=>$_POST["ENROLLER_NAME"],
    "PAGE"=>$_POST["PAGE"],
    "LANGUAGE"=>$_POST["LANGUAGE"],
    "STP"=>$_POST["STP"],
    "FNAME"=>$_POST["FNAME"],
    "LNAME"=>$_POST["LNAME"],
    "EMAIL"=>$_POST["EMAIL"],
    "PHONE"=>$_POST["_POST"],
);
curl_setopt($ch,CURLOPT_URL,"$url");
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true);
curl_setopt($curl, CURLOPT_POSTREDIR, 3);
curl_setopt($ch,CURLOPT_POSTFIELDS,http_build_query($params));
var_dump($returned_content);
$result = curl_exec($ch);
echo $result;
print_r($result);
echo "returned content: " . $returned_content;
curl_close($ch);

这是我的网页sbcmail.php上的结果:

302发现:

NULL

实测值

该文件已移至此处。

实测值

该文件已移至此处。

返回内容:

发生(或不发生)的行为如下。 -1-通过电子邮件通知我订阅者(商家的服务器) -2-未能通过电子邮件欢迎订户(商家的服务器) -3-无法重定向到开始页面(业务的服务器) -4-正确发送我的个人电子邮件(我的服务器)

因此订阅潜在客户未自动重定向到起始页面,并且未收到欢迎电子邮件或任何一系列后续电子邮件。

现在我可以使用PHP重定向(从此示例中排除)来处理重定向到起始页面,因为我已经将URL存储在$ URL中。

但是,我不知道为什么标准的HTTP帖子会设法调用欢迎电子邮件并跟进订阅者的系列,而sbcmail.php的CURL版本却没有?

显然,通过代码和我的PHP代码提供给服务器的信息有所不同。我很感激任何帮助或建议可能是什么......它是完成我的谜题所需的最后一块。

为什么显示NULL?为什么我会得到302?为什么商家的服务器没有将预期的电子邮件发送到订阅潜在客户的电子邮件地址?

好的,我会停止胡言乱语并且用手指交叉,你们其中一个非常聪明的人可以告诉我我做错了什么。

提前致谢,

凯文

你们其中一个精彩的人提出的战术变化。

我现在从Javascript调用我的sbcmail.php文件,该文件解决了直接发送HTML表单并在单击表单上的提交按钮时执行我的PHP代码。

但这又带来了另一个问题。

这是来自捕获页面的JS调用..

<script type='text/javascript'>
function submit(clicked)
{
load('sbcmail.php');
}
</script>

这是sbcmail.php中的PHP代码......

<?php 
$to = "to@email.com"; 
$subject = "SBC Opt-in"; 
$msg = "This is my message" . " " . $_POST["URL"]; 
$headers = "From: from@email.com" . "\r\n" ."CC: cc@email.com"; mail($to,$subject,$msg,$headers); 

$redirect = "affiliate-business.com/login?EMAIL="; . $_POST["EMAIL"] . "&LOGIN=1"; header("Location: $redirect"); 
die(); 
?>

新问题是当我在捕获页面上提交表单时,PHP邮件不起作用,但重定向确实有效,所以我知道JS成功调用了sbcmail.php。

当我直接访问sbcmail.php时,PHP邮件和重定向一样工作。

那么,有没有人有任何想法? JS调用缺少什么吗?

很抱歉感到痛苦,但是我非常接近我打算实现的结果。

1 个答案:

答案 0 :(得分:0)

作为JS实现的后续,这里的代码应该是使用jQuery的样子。注意,要使用jQuery,您只需将其包含在HTML头中:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>

代码:

// Listen For Form Submit:
$('form').submit(function(event) {
  event.preventDefault();                     //Stop the form from submitting temporarily. 
  $.post('sbcmail.php', $(this).serialize()); //Load data from the form and POST to php script.
  $(this).submit();                           //Now submit the form normally. 
});

这会对表单数据执行对PHP脚本的实际POST。我们不关心来自PHP脚本的响应数据(最有可能),我们只想触发它,然后继续使用默认表单提交。