首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将cURL转换为PHP cURL

如何将cURL转换为PHP cURL
EN

Stack Overflow用户
提问于 2019-03-21 03:29:24
回答 1查看 67关注 0票数 2

我正在使用一个应用程序接口来验证一些数据,并且可以从命令行获得他们的cURL应用程序接口,如下所示:

代码语言:javascript
复制
curl --get --include 'https://domainnameher.com/?domain=whatever@virtual-email.com' \
-H 'X-Mashape-Key: f123456879' \
-H 'Accept: application/json'

这将返回一些JSON -一切都很好。当我尝试将其转换为PHP并作为表单处理器脚本运行时,我没有得到任何从服务返回的内容。

HTML

代码语言:javascript
复制
<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

代码语言:javascript
复制
$(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...

代码语言:javascript
复制
<?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;
?>

我不知道为什么当我从终端运行命令时,没有从脚本中得到相同的响应。任何建议都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-21 03:42:05

除了明显的CURLOPT_POST拼写错误之外,还有几个可以在代码中挑选的地方。您使用filter_var,但如果过滤器失败,则继续;您应该检查false值。你不应该在网址上使用urldecodehttp_build_query的整个想法是它为你做网址编码。这是我个人的偏好,但我发现使用curl_setopt_array要容易得多。而且,您应该检查结果是否有效,并在将响应发送回jQuery时使用正确的标头。

代码语言:javascript
复制
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);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55268808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档