带有SS验证的PHP cURL

I have some working cURL scripts but have been relying on the remote server for SS validation. I want to add some validation to our cURL scripts so that if they aren't filled out correctly the request won't get sent. I have client side JS validation, but want to duplicate with SS validation. Here is an example of my cURL script:

<?php
$url = 'https://remoteserver.com/POST.svc/Foo';
$Field1 = $_POST["Field1"];
//other input data

$fields = array(
'Field1'=>urlencode($Field1),
//other input data
);

foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
$fields_string = rtrim($fields_string,'& ');

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$output = curl_exec($ch);

echo $output;
curl_close($ch);
?>

Can I just create an if/else statement like:

<?php
if(empty($_POST['Field1']))) {
echo "Error";
die();
} else {
$url = 'https://remoteserver.com/POST.svc/Foo';
$Field1 = $_POST["Field1"];
//other input data

$fields = array(
'Field1'=>urlencode($Field1),
//other input data
);

foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
$fields_string = rtrim($fields_string,'& ');

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$output = curl_exec($ch);

echo $output;
curl_close($ch);
}

I have ajax stuff that is displayed if the return is "Error". This can't be that easy, is it?

thx

1个回答

Instead of just returning 'Error', why not return some useful stuff? A PHP structure such as

$request_status = array(
    'error' => 1,
    'error_msg' => 'Form was not completed properly'
    'error_details' => array(
        0 => 'Name field not completed',
        1 => 'Invalid state specified',
        2 => 'Password1 and Password 2 do not match'
    )
)

echo json_encode($request_status);

would be of far more use. Your client-side ajax code can simply look for the 'error' parameter in there and either go "Hey, it worked!" or do further based on the error_details you supplied, such as highlighting the form fields that weren't completed correctly.

This also allows you to send back other types of error messages as well, such as saying "hey, the place we're CURLing your form to isn't responding" and the like.

douyan1321
douyan1321 我同意。 我试一试。 感谢你的帮助
9 年多之前 回复
doudan1123
doudan1123 在我看来,让PHP进行解析更简单,只需向你的javascript发回一个简单的“是”/“否”类型的响应。
9 年多之前 回复
duadlkc5762218
duadlkc5762218 是的,我通过cURL提交数据,从远程服务器生成响应并传回我的页面。 jQuery ajax函数在表中搜索2,2单元格,并根据返回消息显示带有成功消息或错误消息+消息(来自远程服务器的错误消息)的相应div。
9 年多之前 回复
dongrong9938
dongrong9938 所以你从远程服务器获取一个表,将其传递回ajax客户端,javascript在该表中搜索2,2个单元格,然后显示一条消息?
9 年多之前 回复
doudansui6650
doudansui6650 好的,我真的想要合并你的方法。 目前,ajax方法基于远程服务器返回的表,搜索第二行,第二列。 如果该单元格包含“True”,则显示成功消息/否则显示<my code> + message + </ mycode>。 有了这个,如果某些东西通过客户端验证而不是服务器端,并且甚至没有发送cURL,则不会显示错误消息。 这对我来说是个问题。 那有意义吗? 我很乐意分享代码,我可以更好地格式化代码
9 年多之前 回复
duan5991518
duan5991518 在卷曲之后,你可以做$ response =('error'=> curl_errno(),'error_message'=> $ output)作为基本响应 - 它仍然会传回其他服务器的状态,包含在你自己的状态中 错误类型的对象。
9 年多之前 回复
dongtiannai0654
dongtiannai0654 我不得不对$ request_status进行一些研究..并且error = 0和error_msg =表单提交好的东西 - 我不完全掌握它在我的脚本中的方式/位置。 我不知道它是否会与我现在正在做的显示他们服务器的响应相冲突。
9 年多之前 回复
dongliehuan3925
dongliehuan3925 是的。 然后在curl内容完成之后,你仍然可以返回上面的数据类型,但是将它设置为error = 0和error_msg = form提交ok类型的东西。
9 年多之前 回复
doru52911
doru52911 对不起,这么厚。 所以我在第二个代码框中的工作会起作用吗? 如果字段是空的echo json_encode ...(将添加你提供的功能)else - 所有的卷曲代码?
9 年多之前 回复
dpd3982
dpd3982 当然,提交AJAX提交与处理常规“用户点击表单上的'提交'”没有什么不同,就字段验证而言。 基本上有一组if / then / else检查来验证需要验证的字段,然后继续(do curl)或abort(返回错误数据)。
9 年多之前 回复
dtnwm4807
dtnwm4807 这太棒了,我也融合了这个。 现在我显示使用ajax验证从远程服务器返回的“消息”。 原始if / else格式是否正确? 我道歉,我不熟悉PHP,就像我在JS / CSS / XHTML等,非常感谢你的帮助
9 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐