Hin und wieder ist es nötig, dass man mit PHP auf htaccess geschützte Seiten zugreifen muss. Über einen Web-Browser muss man bei HTTP Authentication seine Benutzername und Passwort per Hand eintragen. Für automatische Scripte oder Anwendungen geht das natürlich nicht. Zwar gibt es Unmengen an Lösungen im Netz, aber 70% davon sind falsch oder haben Syntaxfehler - keine Ahnung woher das kommt. Hier zwei Lösungsvorschläge mit fopen(), stream_context_create() und CURL.
Lösung 1 mit fopen() und stream_context_create():
<?php
function get_HTTP_AUTH($url, $user = 'admin', $pass = 'admin' ) {
$set = array(
'http' => array(
'method' => 'POST',
'header' => sprintf(
'Authorization: Basic %s',
base64_encode("$user:$pass")
)
)
);
$stream = stream_context_create($set);
$handle = fopen($url, 'r', false, $stream);
return stream_get_contents($handle);
}
echo get_HTTP_AUTH('http://www.mediacix.de/test/');
?> <?php
function get_HTTP_AUTH2($url, $user = 'admin', $pass = 'admin' ) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC );
curl_setopt($ch, CURLOPT_USERPWD, "$user:$pass" );
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
echo get_HTTP_AUTH2('http://www.mediacix.de/test/');
?> <?php
define('HTTP_AUTH_USER', 'admin');
define('HTTP_AUTH_PASS', 'admin');
function get_HTTP_AUTH3($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC );
curl_setopt($ch, CURLOPT_USERPWD, HTTP_AUTH_USER.':'.HTTP_AUTH_PASS );
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
echo get_HTTP_AUTH3('http://www.mediacix.de/test/');
?>