Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php cURL无法准确模拟HTTP Post_Php_Email_Http_Post_Curl - Fatal编程技术网

Php cURL无法准确模拟HTTP Post

Php cURL无法准确模拟HTTP Post,php,email,http,post,curl,Php,Email,Http,Post,Curl,我是一个老派的COBOL程序员,在我的网站/页面上越来越多地钻研PHP的使用。我学到了不少,但有一个新的挑战,旋度应该解决 到目前为止,我还没有设法让我的代码按要求工作,所以我将尝试清楚地解释我希望它做什么,并在下面展示示例 我已经从一家互联网分支机构企业自己的捕获页面中提取了表单代码,以将其放入我自己的全屏视频捕获页面中。基本上,我在我的服务器上托管我的视频捕获页面,但表单与附属企业的服务器交互-从而让我可以控制前端(我的服务器)的外观和感觉,但在后端(他们的服务器)利用附属企业的功能 此设置

我是一个老派的COBOL程序员,在我的网站/页面上越来越多地钻研PHP的使用。我学到了不少,但有一个新的挑战,旋度应该解决

到目前为止,我还没有设法让我的代码按要求工作,所以我将尝试清楚地解释我希望它做什么,并在下面展示示例

我已经从一家互联网分支机构企业自己的捕获页面中提取了表单代码,以将其放入我自己的全屏视频捕获页面中。基本上,我在我的服务器上托管我的视频捕获页面,但表单与附属企业的服务器交互-从而让我可以控制前端(我的服务器)的外观和感觉,但在后端(他们的服务器)利用附属企业的功能

此设置运行良好,表单通过一个简单的HTTP post提交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>
这是我的网页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);
302发现: 空的

发现

文件已移到这里

发现

文件已移到这里

返回的内容:


发生(或未发生)的操作如下所示。。 -1-通过电子邮件通知我订户(业务服务器) -2-未能通过电子邮件欢迎订户(业务服务器) -3-无法重定向到起始页(业务服务器) -4-正确发送我的个人电子邮件(我的服务器)

因此,订阅潜在客户没有自动重定向到起始页,也没有收到欢迎电子邮件或任何后续电子邮件

现在,我可以使用PHP重定向(排除在本例之外)处理重定向到起始页的操作,因为我已经将URL存储在$URL中

但是,我不知道为什么标准HTTP post能够调用订阅者的欢迎电子邮件和后续系列,而我从sbcmail.php获得的CURL版本却没有

显然,通过标准from代码和我的PHP代码传递到服务器的信息存在差异。如果能给我提供帮助或建议,我将不胜感激。。这是完成我的拼图所需要的最后一块了

为什么显示空值?为什么我要302?为什么企业服务器不将预期的电子邮件发送到订阅潜在客户的电子邮件地址

好吧,我不再唠叨了,祈祷你们中的一个聪明人能告诉我我做错了什么

提前感谢,

凯文


你们中的一个好朋友建议改变战术

现在我从Javascript调用sbcmail.php文件,它解决了直接发送HTML表单的问题,并在单击表单上的submit按钮时执行php代码

但这带来了另一个问题

下面是来自捕获页面的JS调用

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

功能提交(单击)
{
加载('sbcmail.php');
}
下面是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>

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

作为JS实现的后续,下面是使用jQuery时代码的外观。注意,要使用jQuery,只需将其包含在HTML头部:

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

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

cURL代码在大部分情况下看起来不错<显示代码>空值,因为变量
$returned\u content
您正在变量转储的内容不存在
$result
是从cURL返回的内容。向第三方提交表单将失败,因为
$\u POST
是一个关联数组,因此您拥有的所有行如
$\u POST-“FNAME”-,
都没有达到预期效果。相反,你需要使用
$\u POST['FNAME']
$\u POST['ENROLLER']]
等。希望这能有所帮助。你在y2k的什么地方?我能猜一下说佛罗里达吗?呵呵:pMy KISS的建议是在表单提交时调用一个JS函数,它会触发您自己的“发送个人电子邮件”脚本,而这个脚本只会这样做。同时将表单直接发布到业务服务器。所以流程是:用户提交表单。您的发送个人电子邮件脚本开始执行。表单已发布到业务服务器。@同理心,非常感谢您的回复。有一阵子我不知道你在说什么。你说的关于$_POST—“FNAME”-是正确的,只是你只在我的问题中看到了这一点,因为我对“[”和“]”进行了全局编辑以发布问题,但没有意识到这一点。所以事实上,我的代码是这样的…$_POST['FNAME'].@移情,抱歉把事情弄糊涂了。我知道详细信息正在到达服务器,因为我可以登录并在我的后台联系人管理器中查看信息,但主要问题是,订阅者没有收到欢迎电子邮件或后续信息,我认为这与接收服务器没有获得特定格式的信息,甚至可能是丢失的信息有关。根据您的经验,我通过PHP页面发布的文章是否直接从HTML中镜像?和你的JS函数ID(我对JS一无所知),
// 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. 
});