我有一个简报插件,要求我将表单电子邮件数据发送到myurl.com/?na=s
电子邮件字段的名称必须为“ne”
我正在尝试使用cURL将订阅者数据提交到简报插件。这是我现在使用的代码:
$address = $_POST['emailer'];
$curlvars = [
'na' => 's',
'ne' => $address
];
$ch = curl_init('http://www.myurl.com/');
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_USERAGENT,
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $curlvars);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
$curl_error = curl_error($ch);
curl_exec($ch);
curl_close($ch);
这段代码都在一个名为send.php的php文件中,我通过ajax发送数据。 send.php文件通过电子邮件向订阅者发送电子邮件,并将订阅者的电子邮件提交给新闻稿插件。
我在该电子邮件中添加了$ result,因此我可以看到CURLOPT_RETURNTRANSFER输出。
当我在表单字段中输入我自己的电子邮件(用于测试)并单击提交时,我收到电子邮件,在底部我得到一个“订阅”按钮(RETURNTRANSFER的输出)。
Inspect Element中的订阅按钮数据是:
<form method="post" action="http://www.myURL.com/" id="m_-3594728259508176106form" target="_blank" onsubmit="try {return window.confirm("You are submitting information to an external page.\nAre you sure?");} catch (e) {return false;}">
<input type="hidden" name="q" value="/10442-2/"><input type="hidden" name="na" value="s"><input type="hidden" name="ne" value="myemail@gmail.com">
<input type="hidden" name="ts" value="1475753672">
<input type="submit" value="Subscribe">
</form>
如果我点击它,它会将电子邮件成功提交到我的简报插件。
基本上,cURL ReturnTransfer输出正确显示所有内容,但是当我从网站提交时,它实际上并没有将数据发布到我的网站。只有当我点击收到的电子邮件中生成的提交按钮时。
我做错了什么?
提前致谢!
答案 0 :(得分:1)
我认为curl_setopt($ ch,CURLOPT_POSTFIELDS)函数存在问题..
你需要像这样更改帖子..
@curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($curlvars ));
@curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
试试这段代码.. 在服务器端不要忘记json_decode()即将到来的数据