Как правильно отправить запрос cUrl? - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь отправить запрос на name.com API и проверить доступность домена в PHP. У меня действительно простой тестовый запрос. Я просмотрел их документы и API, и ошибка, которую я получаю, похоже, не имеет решения. Кто-нибудь использовал их API в прошлом? Что я делаю не так?

choose_domain. 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. Или был введен пароль, а не имя пользователя, или наоборот.

Это просто неверно и не относится к моим кодам. Нет конечного периода.

1 Ответ

1 голос
/ 06 августа 2020

На самом деле вы отправляете имя пользователя и пароль в неправильном формате. Конечная точка API ожидает в формате BASICAUTH username and password, используемом для аутентификации, как указано в 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);
} 
...