2015-11-18 78 views
2

我正在通過PHP腳本更新我的DNS。我已經看過與cURL相關的API文檔,所以我試圖將cURL psot轉換爲PHP。通過PHP/Curl使用CloudFlare API返回錯誤

我有以下代碼:

$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的回來。

{ 「成功」:假, 「錯誤」:[{ 「代碼」:6003, 「消息」: 「無效請求 頭」, 「error_chain」:[{ 「代碼」:6100,「信息「:」Missing X-Auth-Email header「},{」code「:6101,」message「:」Missing X-Auth-Key header「},{」code「:6105,」message「:」Invalid Content-Type頭,有效 值 應用/ JSON,多部分/格式數據 「}]}],」 消息 「:[],」 結果「:空}

我試圖改變json_encode改爲http_build_query,但兩者都返回相同的錯誤。

感謝您提供的任何幫助。

回答

4

我想你是濫用curl_setopt。

這是做設置多個頭的正確方法:

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

編輯

爲了更清楚:

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

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 

頭是不是鍵/值對,而只是價值。

另外,您應該使用http_build_query()發送POST數據。

1

問題在於,當您通過表單數據傳遞數據時,您告訴它使用application/json。設置您的內容類型爲multipart/form-data,它應該工作。如果你想要一個如何使用JSON API的例子,請告訴我。

編輯: CURLOPT_HTTPHEADER不接受鍵/值,只值。因此More information

$fields["X-Auth-Email"] = "[email protected]"; 將需要更改爲: $fields[]= "X-Auth-Email: [email protected]";

0

我已經測試此代碼,我認爲你可以使用它沒有任何問題。 例如:

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

然後:

curl_setopt($ch, CURLOPT_HTTPHEADER, $request_headers);