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 回答