如何将cURL转换为PHP cURL

如何将cURL转换为PHP cURL,php,curl,Php,Curl,我正在使用一个API来验证一些数据,并且可以通过命令行让他们的cURL API工作,如下所示: curl --get --include 'https://domainnameher.com/?domain=whatever@virtual-email.com' \ -H 'X-Mashape-Key: f123456879' \ -H 'Accept: application/json' 这会返回一些JSON——一切都很好。当我尝试将其转换为PHP并作为表单处理器脚本运行时,我没有从服务中得

我正在使用一个API来验证一些数据,并且可以通过命令行让他们的cURL API工作,如下所示:

curl --get --include 'https://domainnameher.com/?domain=whatever@virtual-email.com' \
-H 'X-Mashape-Key: f123456879' \
-H 'Accept: application/json'
这会返回一些JSON——一切都很好。当我尝试将其转换为PHP并作为表单处理器脚本运行时,我没有从服务中得到任何返回

HTML

主要问题是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;
?>


我不知道为什么我不能从脚本中得到与从终端运行命令时相同的响应。非常感谢您的建议。

除了明显的
CURLOPT\u POST
打字错误之外,您还可以在代码中挑出一些小毛病。您可以使用
filter\u var
,但如果过滤器出现故障,请继续操作;您应该检查一个假值。您不应该在URL上使用
urldecode
http\u build\u query
的全部思想是它为您进行URL编码。这是个人喜好,但我发现
curl\u setopt\u array
更容易使用。并且,您应该检查结果是否是有效的JSON,并在将响应发送回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);
}

首先,您是否通过直接在浏览器中发布来确认PHP脚本没有返回预期值?如果是这样,你可以从你的问题中去掉JS和HTML。你为什么要这样做<代码>$endpoint=urldecode($url)如果您的电子邮件包含有问题的字符,例如
+
,那么您的URL将无效。是的,我已经确认PHP脚本不会返回任何内容,只需取出js并直接发布到其中。这是您的问题吗<代码>curl_setopt($ch,CURLOPT_POST,1)否,服务器会将
%40
解码为
@
在他们这边。谢谢您的知识。一个问题,为什么要设置标题(“内容类型:application/json”);在第一行中,然后在CURLOpt_HTTPHeader中——我假设它们是分开的?
头(“内容类型:application/json”)
告诉jQuery代码要发送回哪种数据。一般来说,说出来是明智的,但说出来却没有坏处。在请求头中设置
Accept:application/json
,告诉API您将接受哪种数据。
<?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;
?>
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);
}