2

Icecast2 サーバーにログインして、現在再生中のトラックのメタデータを取得するスクリプトを作成しようとしています。私の問題は、Icecast サーバーが基本的な HTTP ログインを介してユーザー/パスで保護されていることです。

    <?php
        $fp = fsockopen("xxxxxxxx.com", 8000, $errno, $errstr, 30);
        if (!$fp) {
            echo "$errstr ($errno)<br />\n";
        } else {
            $out = "GET / HTTP/1.1\r\n";
            $out .= "Icy-MetaData:1\r\n";
            $out .= "Host: xxxxxxxx.com\r\n";
            $out .= "Connection: Close\r\n\r\n";

            fwrite($fp, $out);
            $arr = array();

            while (!feof($fp)) {
                $arr[] = fgets($fp, 128);
            }
            fclose($fp);
        }

        echo json_encode(trim(strip_tags($arr[73])));

?>

これは、Icecast サーバーがパスワードで保護される前にメタデータを取得できるスクリプトです。

要するに、このスクリプトを介してユーザー/パスを Icecast サーバーに送信して、ログインして情報を正常に取得するにはどうすればよいですか? (htpasswd を使用)

ありがとうございます!

4

3 に答える 3

3

いくつかの研究がこれを明らかにしました。

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt(CURLOPT_USERPWD, '[username]:[password]')

$data = curl_exec();
curl_close($ch);

ただし、ファイル ソケットの代わりにcURLを使用する必要があります。

于 2012-07-24T10:08:15.200 に答える
1

Wikipediaで説明されているように、Authorization: Basicヘッダーと.base64_encode() username:password

追加するコード:

$out .= "Authorization: Basic " . base64_encode($user .":". $password);
于 2012-07-24T10:05:59.147 に答える
0

手動でログインして、ページがCookieを使用してユーザーを認証しているかどうかを確認します。使用している場合は、ヘッダーを使用してCookieを送信できます。これにより、パスワードで保護されたページからデータを取得できるようになります。

$array = array(
      'http'=>array(
        'header'=>"Cookie: *cookiedatahere*"
      )
);

$context = stream_context_create($array);

$url = *password protected data source*;
$raw = file_get_contents($url, false, $context);
于 2012-07-24T10:11:35.110 に答える