Php 使用cURL发送表单数据并从远程API接收JSON验证错误
由于本地web服务器上的一些限制,我不得不使用cURL在远程服务器上处理注释表单数据 我想要实现的是:通过cURL将表单数据发送到远程验证脚本,远程验证脚本检查用户输入的错误。如果存在错误,远程脚本应将“特定”错误发送回本地脚本。如果没有错误,我的远程验证脚本应向我发送电子邮件,并输出一条成功消息,我应在本地文件中接收该消息,如果提交成功与否,我将向填写表单的用户输出该消息 这是我的本地文件Process.php的一个片段Php 使用cURL发送表单数据并从远程API接收JSON验证错误,php,json,curl,Php,Json,Curl,由于本地web服务器上的一些限制,我不得不使用cURL在远程服务器上处理注释表单数据 我想要实现的是:通过cURL将表单数据发送到远程验证脚本,远程验证脚本检查用户输入的错误。如果存在错误,远程脚本应将“特定”错误发送回本地脚本。如果没有错误,我的远程验证脚本应向我发送电子邮件,并输出一条成功消息,我应在本地文件中接收该消息,如果提交成功与否,我将向填写表单的用户输出该消息 这是我的本地文件Process.php的一个片段 $Email = $_POST['Email']; $Comme
$Email = $_POST['Email'];
$Comment = $_POST['Comment'];
$ch = curl_init();
$api ="http://RemoteServer.com/Sendmail.php";
$cu = "$api?Email=$Email&Comment=$Comment";
curl_setopt($ch, CURLOPT_URL, $cu);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 20);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($ch);
curl_close($ch);
这里还有我的远程文件的一个片段
现在,我希望实现的是:
在我的本地文件Process.php中,我应该能够从远程文件Sendmail.php接收错误,并以这种方式使用它:
if (errors_from_remote_file) {
//--- Redirect user to error page to notify of form validation errors
header("Location: ./Error.php");
exit();
} else {
//--- Redirect user to Success page if form successfully validated and email sent to me
header("Location: ./Success.php");
exit();
}
目前,我已经试过了
if (isset($_POST))
and if (isset($_GET))
我在远程文件Sendmail.php中都有从本地文件Process.php检索cURL发送的表单数据,但仍然无法获取表单数据
我真的需要关于如何使用cURL检索从Process.php发送到Sendmail.php的post数据的帮助
一旦实现了这一点,我还想知道如何从本地文件Process.php中的远程文件Sendmail.php检索错误,并根据远程文件Sendmail.php中的错误或成功输出,使用它成功地将用户重定向到下一页
感谢所有人。感谢到目前为止作出回应的所有人。对于
$\u POST
错误,我发现我缺少一个分号。一旦我对它进行了排序,我就能够正确地检索POST数据
至于来自远程文件Sendmail.php
的JSON结果,我能够通过解码JSON对象来输出错误或成功通知,并使用它来操纵位置,以便在出错或成功时指导用户。以下是我的localfile中使用的示例代码:
$fp = fopen(dirname(__FILE__).'/errorlog.txt', 'w'); //-- To monitor cURL procedure
$data = array("name"=>"ohidul","age"=>20);
$string = http_build_query($data);
$ch = curl_init("http://RemoteServer.com/Sendmail.php");
curl_setopt($ch, CURLOPT_POST,true);
curl_setopt($ch, CURLOPT_POSTFIELDS,$string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_STDERR, $fp);
curl_exec($ch);
$response = curl_exec($ch);
curl_close($ch);
//-------------DECODE JSON ERROR FROM REMOTE FILE---------------------------------
$RemoteResponse = json_decode($response);
if ($RemoteResponse == "Failed") {
header("Location: ./Error.php");
exit();
} else {
header("Location: ./Success.php");
exit();
}
//---------------------------------------------
我犯了一些基本的错误,没有注意到丢失的分号,我还认为阅读JSON上的一些TUT是一个漫长的过程。但是,我浏览了JSON上的几行代码,我自己就可以完成了。起初令人沮丧,但我很高兴我通过自己的学习学会了艰难的道路。首先,您从本地脚本以参数形式发送输入,但试图通过远程服务器上的$\u POST访问它。其次,您没有在远程脚本的ELSE部分返回错误。@djunehor如果我使用参数,那么如何在远程文件中检索?其次,远程文件的else部分只能有一个错误,即如果sendmail失败,但这并不重要,因为我可以编写它。重要的是我在前面的问题中提到的几点。“我真的需要关于如何检索post数据的帮助”-也许可以从实际发出post请求开始?关于如何在PHP中使用cURL实现这一点的详细信息,您应该能够轻松地研究自己。“我还想知道如何在本地文件Process.PHP中从远程文件Sendmail.PHP检索错误”-您可以访问$result中的响应体。既然您发送的是JSON,下一步就是对其进行解码,这样您就可以再次访问数据结构中的元素,并根据这些元素做出决定。@04FS谢谢您的写作。然而,英语不是我的第一语言,也许我没有把它说对。当然,我知道如何检索post数据,这是最基本的东西。检查我的远程文件,查看我是否已检索到$\u POST数据。我的经验是,我无法从$\u POST获取数据,我也不知道我是否在CURL请求中传递了正确的参数。至于localfile中的$result,我还尝试对响应进行解码,但没有得到任何结果。
$fp = fopen(dirname(__FILE__).'/errorlog.txt', 'w'); //-- To monitor cURL procedure
$data = array("name"=>"ohidul","age"=>20);
$string = http_build_query($data);
$ch = curl_init("http://RemoteServer.com/Sendmail.php");
curl_setopt($ch, CURLOPT_POST,true);
curl_setopt($ch, CURLOPT_POSTFIELDS,$string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_STDERR, $fp);
curl_exec($ch);
$response = curl_exec($ch);
curl_close($ch);
//-------------DECODE JSON ERROR FROM REMOTE FILE---------------------------------
$RemoteResponse = json_decode($response);
if ($RemoteResponse == "Failed") {
header("Location: ./Error.php");
exit();
} else {
header("Location: ./Success.php");
exit();
}
//---------------------------------------------