我正在使用一个应用程序接口来验证一些数据,并且可以从命令行获得他们的cURL应用程序接口,如下所示:
curl --get --include 'https://domainnameher.com/?domain=whatever@virtual-email.com' \
-H 'X-Mashape-Key: f123456879' \
-H 'Accept: application/json'
这将返回一些JSON -一切都很好。当我尝试将其转换为PHP并作为表单处理器脚本运行时,我没有得到任何从服务返回的内容。
HTML
<form id="testF" action="processor.php" method="POST">
<input type="text" name="Email" id="Email" placeholder="Your Email Address">
<input type="submit" class="redFlat" value="DOWNLOAD">
</form>
用于AJAX的jQuery
$(function(){
$('#testF').validate({
errorPlacement: function(error, element) {},
submitHandler: function(form) {
var dataString = $(form).serialize();
$.ajax({
type:$('#testF').attr('method'),
url: form.action,
data: dataString,
dataType: 'json',
success: function(data) {
console.log(data);
}
});
return false;
}
});
});
最主要的问题是PHP处理器。我从表单中获取POST值并将其附加到URL...
<?php
$email = filter_var($_POST["Email"], FILTER_SANITIZE_EMAIL);
$fields = array('domain' => $email);
$url = "https://mailcheck.p.mashape.com/?" . http_build_query($fields, '', "&");
$endpoint = urldecode($url);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $endpoint);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$headers = [
'X-Mashape-Key: f123456879',
'Accept: application/json'
];
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$server_output = curl_exec ($ch);
curl_close ($ch);
echo $server_output;
?>
我不知道为什么当我从终端运行命令时,没有从脚本中得到相同的响应。任何建议都是非常感谢的。
发布于 2019-03-21 03:42:05
除了明显的CURLOPT_POST
拼写错误之外,还有几个可以在代码中挑选的地方。您使用filter_var
,但如果过滤器失败,则继续;您应该检查false值。你不应该在网址上使用urldecode
,http_build_query
的整个想法是它为你做网址编码。这是我个人的偏好,但我发现使用curl_setopt_array
要容易得多。而且,您应该检查结果是否有效,并在将响应发送回jQuery时使用正确的标头。
header("Content-Type: application/json");
$email = filter_var($_POST["Email"], FILTER_SANITIZE_EMAIL);
if (!$email) {
header("HTTP/1.1 500 Server Error");
$res = ["result"=>false, "message"=>"Invalid email"];
echo json_encode($res);
exit;
}
$fields = ['domain' => $email];
$url = "https://mailcheck.p.mashape.com/?" . http_build_query($fields);
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'X-Mashape-Key: f123456879',
'Accept: application/json'
]
]);
$server_output = curl_exec($ch);
curl_close ($ch);
if (json_decode($server_output)) {
echo $server_output;
} else {
header("HTTP/1.1 500 Server Error");
$res = ["result"=>false, "message"=>"Invalid response from server: $server_output"];
echo json_encode($res);
}
https://stackoverflow.com/questions/55268808
复制相似问题