0

新しい「A」レコードを Cloudflare ゾーンに追加する PHP スクリプトがありますが、デフォルトでは、これらの新しい「A」レコードは Cloudflare によって非アクティブに設定されており、作成時にアクティブとして設定することはできません。

したがって、新しいレコードを編集してアクティブに設定するには、「A」レコード「rec_id」が必要です。この場合、ゾーン「A」レコードが多すぎるため、アクション「rec_load_all」は使用できず、リクエストをフィルタリングできないと思います(間違っている可能性があり、間違っているのは良いことです)。ゾーンをフィルタリングする必要があります。

次の 'dns_get_rec_one' を試しましたが、エラー メッセージなしで 'NULL' を返すだけです。

    function returnId(){
    $request = array();
    $request['a'] = 'dns_get_rec_one';
    $request['tkn'] = $this->tkn;
    $request['email'] = $this->apiEmail;
    $request['z'] = 'domain.com';
    $request['name'] = 'sub.domain.com';

    $response = @json_decode(file_get_contents('https://www.cloudflare.com/api_json.html?' . http_build_query($request)), true);
}

API インタラクションの経験がほとんどないので、何かアイデアはありますか?

ありがとう

4

1 に答える 1

1

わかりました、私はいくつかの助けを借りてこれを解決しました。

Cloudflare に対して CURL の「rec_new」呼び出しを行うと、応答には新しい「A」レコードの「rec_id」が含まれます。これは、次の CURL 'rec_edit' 呼び出しで 'id' として使用して、レコードをアクティブとして編集できます。

Cloudflare サポートの担当者も 24 時間以内に回答し、役に立ちます。

以下のクラスのスニペット:

private function newSub(){
    $fields = array(
        'a' => 'rec_new',
        'tkn' => $this->tkn,
        'email' => $this->apiEmail,
        'z' => $this->domain,
        'type' => 'A',
        'name' => $this->subName,
        'content' => $this->content,
        'ttl' => 1
    );
    //url-ify the data for the POST
    foreach($fields as $key=>$value){
        $fields_string .= $key.'='.$value.'&';
    }
    rtrim($fields_string, '&');

    //open connection
    $ch = curl_init();

    //set the url, number of POST vars, POST data
    curl_setopt($ch,CURLOPT_URL, 'https://www.cloudflare.com/api_json.html');
    curl_setopt($ch,CURLOPT_POST, count($fields));
    curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);

    //execute post
    $response = curl_exec($ch);

    //close connection
    curl_close($ch);        
    $response = json_decode($response,true);

    if(!$response || $response['result'] != 'success'){
        $responseError = $response['msg'];
        // ERROR Handling
    }else{
        // Set rec_id for from the nw A record
        $this->rec_id = $response['response']['rec']['obj']['rec_id'];  
        // Activate
        $this->makeActive();
    }
}

private function makeActive(){
    $request['a'] = 'rec_edit';
    $request['tkn'] = $this->tkn;
    $request['email'] = $this->apiEmail;
    $request['z'] = $this->domain;
    $request['id'] = $this->rec_id;
    $request['type'] = 'A';
    $request['name'] = $this->subName;
    $request['content'] = $this->content;
    $request['service_mode'] = '1';// Make active
    $request['ttl'] = '1';

    $response = @json_decode(file_get_contents('https://www.cloudflare.com/api_json.html?' . http_build_query($request)), true);
    //var_dump($response); die;
    if(!$response || $response['result'] != 'success'){
        $responseError = $response['msg'];
        // ERROR Handling 
    }
}

これが誰かに役立つことを願っています。

于 2013-08-18T04:19:48.267 に答える