首页 > 解决方案 > 如何以正确的方式发布 cUrl 请求?

问题描述

我正在尝试向name.com API 发布请求并检查 PHP 中的域可用性。我真的有一个简单的测试请求。我浏览了他们的文档和 API,我收到的错误似乎没有解决方案。过去有人使用过他们的 API 吗?我究竟做错了什么?

选择域.php

if(isset($_POST['domain'])){
    //get domain mae 
    $domain = $_POST['domain'];
    //
    //
    $url = 'https://api.dev.name.com/v4/domains:checkAvailability';
    $fields = array(
                'username' => $username,
                'password' => $password,
                'token' => $name_token,
                'domainNames' => array($domain)
            );
    
    //url-ify the data for the POST
    $fields_string = http_build_query($fields);
    //
    //
    //
    //open connection
    $ch = curl_init();
    //
    //
    //
    //set the url, number of POST vars, POST data
    curl_setopt($ch,CURLOPT_URL, $url);
    curl_setopt($ch,CURLOPT_POST, 1);
    curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
    
    //execute post
    $result_domain = curl_exec($ch);
    
    //close connection
    curl_close($ch);
}

API 响应

{"message":"Unauthenticated"} 

根据他们的API ,此错误意味着以下内容:

URL 请求有一个尾随句点(name.com 之后的句点)示例:https://api.dev.name.com./v4/domains。或者,已输入密码但未输入用户名,反之亦然。

这根本不是真的,我的代码也不是这样。没有尾随期间。

标签: phphttpcurl

解决方案


实际上,您发送的用户名和密码格式错误。username and passwordAPI 端点期望采用用于身份验证的 BASICAUTH 格式,如https://www.name.com/api-docs/Domains#CheckAvailability中所述,但您发送的是原始数据或正文数据。

相反,您必须发送您username and password的:

curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password); 

所以您的完整代码将如下所示:

if(isset($_POST['domain'])) {
 
    //get domain mae 
    $domain = $_POST['domain'];

    $url = 'https://api.dev.name.com/v4/domains:checkAvailability';
    $fields = array(
                'token' => $name_token,
                'domainNames' => array($domain)
            );
    
    //url-ify the data for the POST
    $fields_string = http_build_query($fields);

    //open connection
    $ch = curl_init();

    //set the url, number of POST vars, POST data
    curl_setopt($ch,CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
    curl_setopt($ch,CURLOPT_POST, 1);
    curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
    
    //execute post
    $result_domain = curl_exec($ch);
    
    //close connection
    curl_close($ch);
} 

推荐阅读