创建A-记录使用Plesk API [英] Creating an A-Record with Plesk API
本文介绍了创建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屋!
查看全文