创建A-记录使用Plesk API [英] Creating an A-Record with Plesk API

查看:168
本文介绍了创建A-记录使用Plesk API的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我修改的例子PHP脚本的API的Plesk足够,我认为它应该是努力创造一个A记录DNS,但是每当我运行该脚本,它只是超时约2-3分钟后。相似之处发展论坛似乎是一个空城,所以我希望,也许有人在这里也许能发现问题。

 < PHP/ **在API的RPC请求*报告的错误/
类ApiRequestException扩展异常{}功能DNSCreateRequest()
{
    $ xmlDoc中=新的DomDocument('1.0','utf-8');
    $ xmldoc-> formatOutput = TRUE;    //&所述;数据分组>
    $包= $ xmldoc->的createElement('分组');
    $分组>的setAttribute('版本','1.6.3.1');
    $ xmldoc->的appendChild($包);    //<包/ DNS>
    $ DNS = $ xmldoc->的createElement(DNS);
    $分组>的appendChild($ DNS);    //<包/ DNS / add_rec>
    $ addrec = $ xmldoc->的createElement('add_rec');
    $ DNS->的appendChild($ addrec);    // add_rec元素
        $ addrec->的appendChild($ xmldoc->的createElement('DOMAIN_NAME','fragnet.net'));
    $ addrec->的appendChild($ xmldoc->的createElement('型','A'));
    $ addrec->的appendChild($ xmldoc->的createElement('主机','testdns'));
    $ addrec->的appendChild($ xmldoc->的createElement('值','127.0.0.1'));    // $ xmldoc-> saveXML($ addrec);    返回$ xmlDoc中;
}/ ** prepares卷曲执行小组API请求* /
功能curlInit($主机,$登录,$密码)
{
    $卷曲= curl_init();
    curl_setopt($卷曲,CURLOPT_URL,请https:// {$}主持人:8443 /企业/控制/ agent.php);
    curl_setopt($卷曲,CURLOPT_RETURNTRANSFER,真正的);
    curl_setopt($卷曲,CURLOPT_POST,真正的);
    curl_setopt($卷曲,CURLOPT_SSL_VERIFYPEER,FALSE);
    curl_setopt($卷曲,CURLOPT_SSL_VERIFYHOST,FALSE);
    curl_setopt($卷曲,CURLOPT_HTTPHEADER,    阵列(HTTP_AUTH_LOGIN:{$登录},
        HTTP_AUTH_PASSWD:{$密码},
        HTTP_ preTTY_PRINT:TRUE,
        内容类型:文本/ XML)
    );    返回$袅袅;
}/ **执行的Panel API请求,返回原始API响应文本* /
函数sendRequest将($卷曲,$数据包)
{
    curl_setopt($卷曲,CURLOPT_POSTFIELDS,$包);
    $结果= curl_exec($卷曲);    如果(curl_errno($卷曲))
    {
        $ ERRMSG = curl_error($卷曲);
        $犯错code = curl_errno($卷曲);
        curl_close($卷曲);
        抛出新ApiRequestException($ ERRMSG,$ ERR code);
    }      curl_close($卷曲);
      返回$结果;
}/ **看起来如果API与正确的数据*回应/
功能parseResponse($ response_string)
{
    $ XML =新的SimpleXMLElement($ response_string);    如果(!is_a($ xml的,'的SimpleXMLElement'))
        抛出新ApiRequestException(无法解析服务器响应:{$ response_string});    返回$ xml的;
}/ **入住API响应数据* /
功能checkResponse($的SimpleXMLElement响应)
{
    $ resultNode = $响应 - > DNS-GT&;&add_rec- GT;的结果;    //检查请求是成功的
    如果('错误'==(字符串)$ resultNode->状态)
        抛出新ApiRequestException(小组API返回的错误:(字符串)$ resultNode-> result-> errtext);
}// INT的main()$主机='www.mydomainishere.net';
$登录='名为myusername';
$密码='输入mypassword';$卷曲= curlInit($主机,$登录,$密码);尝试
{
    $响应= sendRequest将($卷曲,DNSCreateRequest() - > saveXML());
    $ responseXML的= parseResponse($响应);
    checkResponse($ responseXML的);
}
赶上(ApiRequestException $ E)
{
    回声$ê;
    死();
}//浏览结果的foreach($ responseXml->的XPath('/包/ DNS / add_rec /结果')为$ resultNode)
{
    回声DNS ID:。 (字符串)$ resultNode-> ID。 ;
    //回声(字符串)$ resultNode->数据 - > gen_info->的名字。 ((字符串)$ resultNode-方式>&数据 - GT; gen_info-方式> dns_ip_address)\\ n;
}?>


解决方案

我能够确定它不会接受'域名,而是想要一个站点ID来代替。一旦使用了,我的脚本工作得十分完美。

I modified the example PHP script for the Plesk API enough that I think it SHOULD be working to create an A-Record DNS, however whenever I run the script it simply times out after about 2-3 minutes. The Parallels Development forums seem to be a ghost town, so I am hoping maybe someone here might be able to spot the issue.

<?php

/** Reports error during API RPC request */
class ApiRequestException extends Exception {}

function DNSCreateRequest()
{
    $xmldoc = new DomDocument('1.0', 'UTF-8');
    $xmldoc->formatOutput = true;

    // <packet>
    $packet = $xmldoc->createElement('packet');
    $packet->setAttribute('version', '1.6.3.1');
    $xmldoc->appendChild($packet);

    // <packet/dns>
    $dns = $xmldoc->createElement('dns');
    $packet->appendChild($dns);

    // <packet/dns/add_rec>
    $addrec = $xmldoc->createElement('add_rec');
    $dns->appendChild($addrec);

    // add_rec elements
        $addrec->appendChild($xmldoc->createElement('domain_name','fragnet.net'));
    $addrec->appendChild($xmldoc->createElement('type','A'));
    $addrec->appendChild($xmldoc->createElement('host','testdns'));
    $addrec->appendChild($xmldoc->createElement('value','127.0.0.1'));

    //$xmldoc->saveXML($addrec);

    return $xmldoc;
}

/** Prepares CURL to perform the Panel API request */
function curlInit($host, $login, $password)
{
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, "https://{$host}:8443/enterprise/control/agent.php");
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_POST,           true);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($curl, CURLOPT_HTTPHEADER,

    array("HTTP_AUTH_LOGIN: {$login}",
        "HTTP_AUTH_PASSWD: {$password}",
        "HTTP_PRETTY_PRINT: TRUE",
        "Content-Type: text/xml")
    );

    return $curl;
}

/** Performs a Panel API request, returns raw API response text */
function sendRequest($curl, $packet)
{
    curl_setopt($curl, CURLOPT_POSTFIELDS, $packet);
    $result = curl_exec($curl);

    if (curl_errno($curl))
    {
        $errmsg  = curl_error($curl);
        $errcode = curl_errno($curl);
        curl_close($curl);
        throw new ApiRequestException($errmsg, $errcode);
    }

      curl_close($curl);
      return $result;
}

/** Looks if API responded with correct data */
function parseResponse($response_string)
{
    $xml = new SimpleXMLElement($response_string);

    if (!is_a($xml, 'SimpleXMLElement'))
        throw new ApiRequestException("Cannot parse server response: {$response_string}");

    return $xml;
}

/** Check data in API response */
function checkResponse(SimpleXMLElement $response)
{
    $resultNode = $response->dns->add_rec->result;

    // check if request was successful
    if ('error' == (string)$resultNode->status)
        throw new ApiRequestException("The Panel API returned an error: " . (string)$resultNode->result->errtext);
}

// int main()

$host = 'www.mydomainishere.net';
$login = 'myusername';
$password = 'mypassword';

$curl = curlInit($host, $login, $password);

try
{
    $response = sendRequest($curl, DNSCreateRequest()->saveXML());
    $responseXml = parseResponse($response);
    checkResponse($responseXml);
}
catch (ApiRequestException $e)
{
    echo $e;
    die();
}

// Explore the result

foreach ($responseXml->xpath('/packet/dns/add_rec/result') as $resultNode)
{
    echo "DNS id: " . (string)$resultNode->id . " ";
    //echo (string)$resultNode->data->gen_info->name . " (" . (string)$resultNode->data->gen_info->dns_ip_address . ")\n";
}

?>

解决方案

I was able to determine that it would not accept "domain_name" and instead wanted a "site-id" instead. Once this was used, my script worked flawlessly.

这篇关于创建A-记录使用Plesk API的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆