0

我有一个 PHP 脚本,可以将新的“A”记录添加到 Cloudflare 区域,但是,默认情况下,Cloudflare 将这些新的“A”记录设置为非活动状态,现在您在创建它们时无法将它们设置为活动状态。

因此,要编辑新记录以将其设置为活动状态,您需要“A”记录“rec_id”。在这种情况下,不能使用操作“rec_load_all”,因为区域“A”记录太多,我认为您不能过滤请求(可能是错误的,如果是错误的就好了)。该区域需要过滤。

我尝试了以下“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 回答