PHP Rest Api с несколькими параметрами, как отправлять с помощью curl

#php #api #rest

#php #API #rest

Вопрос:

Застревание в post к Rest API с несколькими аргументами. Я пытаюсь изменить серверы имен с помощью API.

Ошибка, которую я получаю: "ObjectInvalid|Nameserver object invalid. Minimum of 2 nameservers is required.".

Я понимаю, что часть «ns» неверна. В руководстве я нахожу только это: "ns" : [{ns="ns1.domain.com", nsip=""},{ns="ns2.domain.com", nsip=""}],

Это мой код:

    $values = array(
      "domain" => "mydomain.com",
      "ns" => "[{ns='ns1.domain.com', nsip=''},{ns='ns2.domain.com', nsip=''}]",
      "contact_id" =>  123456,
      "years" => 1
    );
    
    // Set POST to 1 and send the array with values as a JSON-string
    curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_POST => 1,
    CURLOPT_POSTFIELDS => json_encode($values),
    CURLOPT_URL => "https://www.apiurl.com/api/v1/domains/$domain/update",
    CURLOPT_HTTPAUTH => CURLAUTH_ANY,
    CURLOPT_USERPWD => "username:password"
    ));
 

Комментарии:

1. Это звучит как вопрос к владельцам API? Мы даже не знаем, что это за API, поэтому нам довольно сложно понять, какие или как они ожидают получить данные. Вы пробовали добавлять ns -string в качестве PHP-массива вместо этого? В любом случае, вы уже используете json_encode() всю полезную нагрузку.

2. Вы не должны создавать строку JSON вручную следующим образом: "ns" => "[{ns='ns1.domain.com', nsip=''},{ns='ns2.domain.com', nsip=''}]" . Поскольку вы запускаете его json_encode($values) позже, он получает двойное кодирование, а затем, скорее всего, не может быть понят API. Сделайте это обычным подмассивом PHP и дайте json_encode ему выполнить эту работу.

Ответ №1:

Трудно сказать точно, не просмотрев документацию, но, скорее всего, вам следует оставить сериализацию серверов json_encode имен слишком:

 $values = array(
    "domain" => "mydomain.com",
    "ns" => [
        [
            "ns" => "ns1.domain.com",
            "nsip" => ""
        ],
        [
            "ns" => "ns2.domain.com",
            "nsip" => ""
        ],
    ],
    "contact_id" =>  123456,
    "years" => 1
);
 

Комментарии:

1. Только одна крошечная вещь — серверы имен, а не пространства имен.

2. Да, это оно! Спасибо, что помогли так быстро! (Придется подождать, пока я не смогу ответить)