Использование CloudFlare API через PHP / Curl возвращает ошибку



Я работаю над обновлением DNS с помощью PHP-скрипта. Я посмотрел документацию API, относящуюся к cURL, поэтому я пытаюсь преобразовать cURL psot в PHP.



У меня есть следующий код:



$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.cloudflare.com/client/v4/zones/<MY_ZONE>/dns_records/<MY_ID>");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");

$fields = array();
$fields["X-Auth-Email"] = "[email protected]";
$fields["X-Auth-Key"] = "MY_KEY";
$fields["Content-Type"] = "application/json";
curl_setopt($ch, CURLOPT_HTTPHEADER, $fields);

$dnsData = array();
$dnsData["id"] = "MY_ID";
$dnsData["type"] = "A";
$dnsData["name"] = "home";
$dnsData["content"] = $newIPAddress;

curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($dnsData));


echo "posting to API<br />";
$result = curl_exec($ch);
echo "Result: " . $result;


С помощью вышеуказанного кода я получаю следующий ответ от Cloudflare.




{"success": false, "errors": [{"code": 6003, "message": "Invalid request
заголовки","error_chain":[{"код":6100,"сообщение":"отсутствует х-авт-по электронной почте
заголовок"}, {"код": 6101, "сообщение": "отсутствует X-Auth-Ключ
заголовок"}, {"код": 6105, "сообщение": "недопустимый заголовок типа содержимого, допустимый
ценности есть
application/json, multipart / form-data"}]}], "messages": [], "result": null}




Я попытался изменить код json_encode на http_build_query, но оба возвращают одну и ту же ошибку.



Спасибо за любую помощь, которую вы можете оказать.

996   3  

3 ответов:

Я думаю, что вы злоупотребляете curl_setopt.

Это правильный способ сделать set multiple header:

curl_setopt($ch,CURLOPT_HTTPHEADER, ['HeaderName: HeaderValue','HeaderName2: HeaderValue2']);

EDIT

Чтобы было понятнее:

$headers = [ 
    'X-Auth-Email: [email protected]',
    'X-Auth-Key: MY_KEY',
    'Content-Type: application/json'
];

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

Заголовки - это не пара ключ / значение, а только значения.

Кроме того, вы должны отправлять POST-данные с помощью http_build_query().

Проблема в том, что вы говорите ему использовать application/json, когда вы передаете ему данные формы. Установите свой тип контента в multipart/form-data, и он должен работать. Если вам нужен пример использования API JSON, дайте мне знать.

EDIT: CURLOPT_HTTPHEADER не принимает ключ / значения, только значения. дополнительная информация

$fields["X-Auth-Email"] = "[email protected]"; поэтому необходимо было бы изменить на: $fields[]= "X-Auth-Email: [email protected]";

Я протестировал этот код и думаю, что вы можете использовать его без каких-либо проблем. Пример:

    $request_headers = array(
    'X-Auth-Email: [email protected]',
    'X-Auth-Key: d820fa8fc881921323e08a2c19b8347896ac26',
    'Content-Type: application/json'
);

Затем:

curl_setopt($ch, CURLOPT_HTTPHEADER, $request_headers);

Comments

    Ничего не найдено.