Plesk API* 的文档给出了以下 cURL 函数。
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;
}
我有几个问题。
我从未在其他任何地方看到带有下划线的HTTP标头。这是文档中的错误吗?
HTTP_PRETTY_PRINT
到底是什么?搜索这个只是让我回到 Plesk 文档。我在其他任何地方都看不到它。使用
HTTP_AUTH_LOGIN
和HTTP_AUTH_PASSWD
而不是CURLOPT_USERPWD
有什么关系?
顺便说一句,无论我尝试什么选项,我都会从 Plesk 得到以下回应。
HTTP/1.1 404 Not Found
X-UA-Compatible: IE=EmulateIE7
Content-Type: text/html
Content-Length: 345
Date: Wed, 27 Jun 2012 14:58:15 GMT
Server: sw-cp-server
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>404 - Not Found</title>
</head>
<body>
<h1>404 - Not Found</h1>
</body>
</html>
* Parallels Plesk Panel 9.5:: API RPC 协议开发人员指南> PHP 客户端应用程序>客户端代码示例
对于第 4 点:
404 表示文件.../enterprise/control/agent.php
已从服务器中删除。几个月前,许多人这样做是为了在补丁发布之前防止安全漏洞。我建议检查/usr/local/psa/admin/logs/httpsd_access_log
文件是否有错误以及/usr/local/psa/admin/htdocs/enterprise/control/agent.php
的可用性
- Plesk 使用自己的标头。在自定义 HTTP 请求中,您可以添加任何有效的标头。例如,一些网络服务器添加自己的标头,例如"powerby: xxxx",所以没关系。
- 漂亮的 XML 输出需要漂亮的打印标头。
HTTP_AUTH_LOGIN
标头包含面板用户登录名。HTTP_AUTH_PASSWD
标头包含面板用户密码。CURLOPT_USERPWD
不是必需的。-
尝试使用以下选项:
$ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_ENCODING, 'UTF-8'); curl_setopt($ch, CURLOPT_POSTFIELDS, $packet); curl_setopt($ch, CURLOPT_TIMEOUT, 1200); //wait 20min $response = curl_exec($ch);