php - cURL无法完全模拟HTTP Post

标签 php email http post curl

我是一个老派的cobol程序员,在我的网站/页面上对php的使用进行了越来越多的研究。我学到了很多,但有一个新的挑战,旋度应该解决。
到目前为止,我还没有成功地使我的代码按要求工作,所以我将尝试清楚地解释我希望它做什么,并在下面显示示例。
我已经从一家网络附属公司的自己的捕获页面中提取了表单代码,以便将其放入自己的全屏视频捕获页面。基本上,我在我的服务器上托管我的视频捕获页面,但表单与分支机构业务的服务器交互-从而让我控制前端(我的服务器)的外观,但在后端(他们的服务器)使用分支机构业务的功能。
这个设置工作得很好,表单通过一个简单的http帖子提交了prospects的详细信息,如下所示。

<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-立即将它们重定向到起始页(业务服务器)
好吧,现在我来试着变得聪明点。
我不仅想将表单数据提交到附属公司的服务器,而且还想在单击“From Submit”按钮时向订阅潜在客户发送我自己的个人电子邮件。
所以我基本上想要一个提交按钮中的两个操作。
我的解决方案是引入一个php文件来处理使用php mail函数发送个人电子邮件和使用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:
无效的
找到
文档已移到此处。
找到
文档已移到此处。
返回内容:
发生(或未发生)的操作如下。
-1-通过电子邮件通知我订户(业务服务器)
-2-无法通过电子邮件(业务服务器)欢迎订户
-3-无法重定向到起始页(业务服务器)
-4-正确发送我的个人电子邮件(我的服务器)
因此,订阅的潜在客户不会自动重定向到起始页,也不会收到欢迎电子邮件或任何一系列后续电子邮件。
现在,我可以使用php重定向(不包括在本例中)处理到起始页的重定向,因为我已经将url存储在$url中。
但是,我不知道为什么标准的http post能够调用欢迎电子邮件和订阅服务器的后续系列,而我的curl版本sbcmail.php却没有?
显然,通过标准代码和我的php代码传递给服务器的信息是有区别的。我希望能得到任何帮助或建议。这是完成我的拼图所需的最后一块。
为什么显示空值?为什么我要302?为什么企业的服务器不将预期的电子邮件发送到订阅潜在客户的电子邮件地址?
好吧,我不要再胡扯了,祈祷你们中的一个聪明人能告诉我我做错了什么。
提前谢谢你,
凯文
根据你们其中一个优秀的人的建议改变策略。
我现在从javascript调用sbcmail.php文件,它解决了直接发送html表单和在单击表单上的submit按钮时执行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呼叫是否遗漏了什么?
很抱歉我很痛苦,但我离我要达到的目标太近了。

最佳答案

作为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脚本的响应数据(很可能),我们只想触发它,然后继续使用默认的表单提交。

关于php - cURL无法完全模拟HTTP Post,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36730724/

相关文章:

php - 使用从数组中提取的 ID 向用户发送电子邮件

Apache http 服务器每 60 秒断开一次连接

php - 需要帮助将 mysql_fetch_array 中的值插入到函数中

PHP 嵌套循环行为异常

javascript - JavaScript 中的加密和 PHP 中的解密

php - MySQL 选择一个包含替换文本的列,它等于一个值

php - mysql/laravel组查询结果

连接到奇怪的 SMTP 服务器

javascript - Angular 1.6 $http 无错误响应

http - 对 favicon.ico 的 http 请求的最小正确答案是什么