1

最近から、cPanelはログイン方法を変更しました。

ログインする前のURLは次のとおりです:https:// accessurl:2083 /

ログイン後:https:// accessurl:2083 / cpsessXXXX / frontend / x3 / index.html?post_login = 89711792346495

URLに埋め込まれたcpsessXXXXに注意してください。

AWSTATSにアクセスするためのページは次のとおりです:https:// accessurl:2083 / cpsessXXXX / awstats.pl?config = domain_name&ssl =&lang = en

私は次のPHPコードを試しました

$username = 'xxx';
$password = 'xxx';
$loginUrl = 'https://<accessurl>';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $loginUrl);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'user='.$username.'&pass='.$password);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PORT,2083);
$store = curl_exec($ch);
curl_close($ch);

コードをステップスルーすると、$ storeの値はFALSEになります。これは、ログインプロセスが失敗したことを意味します。

私がウェブ上で同様の問題を見つけた唯一の参照は、3月28日のエントリのhttp://blog.mcfang.com/にあります。

Cookies.txtにcpsessXXXX情報が含まれることを期待していましたが、ファイルが作成されません。

助けてくれてありがとう

4

2 に答える 2

5

スクリプトを受け入れるには、セキュリティ トークンを cPanel に参照する必要があります。セキュリティトークンのcPanelドキュメントのドキュメントに従って

次の例を見てください。

function createSession() { // Example details
$ip = "127.0.0.1";
$cp_user = "username";
$cp_pwd = "password";
$url = "http://$ip:2082/login";
$cookies = "/path/to/storage/for/cookies.txt";

// Create new curl handle
$ch=curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookies); // Save cookies to
curl_setopt($ch, CURLOPT_POSTFIELDS, "user=$cp_user&pass=$cp_pwd");
curl_setopt($ch, CURLOPT_TIMEOUT, 100020);

// Execute the curl handle and fetch info then close streams.
$f = curl_exec($ch);
$h = curl_getinfo($ch);
curl_close($ch);

// If we had no issues then try to fetch the cpsess
if ($f == true and strpos($h['url'],"cpsess"))
{
    // Get the cpsess part of the url
    $pattern="/.*?(\/cpsess.*?)\/.*?/is";
    $preg_res=preg_match($pattern,$h['url'],$cpsess);
}

// If we have a session then return it otherwise return empty string
return (isset($cpsess[1])) ? $cpsess[1] : "";
} 

cpsess は、cPanel が期待する正しいトークンを URL に追加するために使用されます。

于 2012-12-03T21:54:10.740 に答える
2

この単純な行を追加するヘッダーによって「承認」行を送信できます。

$header[0] = "Authorization: Basic " . base64_encode($cp_user.":".$cp_pwd) . "\n\r";
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);  

そのため、Cookie などを使用せずに、リソース $myResource に直接リクエストを送信できます。単に:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $myResource);
$header[0] = "Authorization: Basic " . base64_encode($cp_user.":".$cp_pwd) . "\n\r";
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PORT,2083);
$store = curl_exec($ch);
curl_close($ch);

CPanel の XML API の使用を検討する必要があります。Github でxmlapi-php クラスを見つけることができます。これはうまく機能し、コードをシンプルで更新しやすい状態に保つのに役立ちます。

于 2013-10-11T11:35:51.713 に答える