Autor Zpráva
Pavel9876
Profil *
Ahoj, snažím se načíst obsah souboru, který je umístěn n a vzdáleném serveru, navíc zaheslovaný přes http autentifikaci. návodů jsem našel spousty, jeden elegantní sem vložim, ale bohužel, v mém případě stále nefunguje a dostávám hlášku:

PHP Warning:  file_get_contents({adresa}) [<a href='function.file-get-contents'>function.file-get-contents</a>]: failed to open stream: HTTP request failed! HTTP/1.1 401 Unauthorized 


kód: (zpětné lomítko u jména a tečka u hesla jsou zde napsány schválně, pro případ, že by se i v tom schovával problém, složené závorky jsou jen na okrasu)

$login_name = "{xxxxx\yyy}";
$login_pass = "{aaaaa.bbb}";

$context = stream_context_create(array(
    'http' => array(
        'header'  => "Authorization: Basic " . base64_encode("$login_name:$login_pass")
    )
));


$address = "{adresa}";

$content = file_get_contents($address,false,$context);

echo $content;


bohužel to takto nefunguje... přistupovat na vzdálený soubor jsem zkoušel i přes syntaxi http://{jmeno}:{heslo}@{adresa} , ale bez úspěchu...

neměl jste někdo podobný problém?
Pavel9876
Profil *
Zapomněl jsem dodat, že přes prohlížeč se na vzdálený soubor po přihlášení pomocí stejných přihl. údajů normálně dostanu
peta
Profil
Tohle je vycuc z jednoho programu, co tu mame. Na tom serveru to musi byt povolene a musi byt povolene i cookies.
Problem, ktery jsem resil byl v tom, ze byla jinak nastavena http autentizece na serveru a jinak v programu. Ono se tam to Basic nekdy pise a nekdy nepise, podle toho, jak to mas nastavene na serveru. Trvalo mi asi pul dne najit chybu. Program jsem totiz netvoril ja. Ve tvem pripade to bude mozna opacne, mas prave nastavene, ze to basic tam nema byt, nejspis.
Ano, chovalo se to presne tak, jak popisujes, pres prohlizec se tam normalne prihlasis, ale pres php nikoliv. Protoze prohlizec dostal spravne hlavicky ze serveru a ty mu vraci :)

function authorize() {

    global $authString;

    if (isset($_SERVER['PHP_AUTH_USER'])) {
        $authType = 'Basic ';
//        $authType = '';
        $authString = $authType.base64_encode($_SERVER['PHP_AUTH_USER'].":".$_SERVER['PHP_AUTH_PW']);
    } else if (isset($_SERVER['HTTP_AUTHORIZATION'])) {
        $authString = $_SERVER['HTTP_AUTHORIZATION'];
    } else {
        header('WWW-Authenticate: Basic realm="Prijimacky - statistiky"');
        header('HTTP/1.0 401 Unauthorized');
        echo 'Je treba se prihlasit jako tajemnik fakulty nebo jako prorektor (administrator, fakulta, referentka nebo prorektor)';
        exit;
    }

}

/* Vrati vystup zadane webove sluzby */
function getServiceResult($serviceURL, $doAuth = 1) {

    global $authString;
    $header  = ($doAuth == 0 ? "X" : "")."Authorization: " . $authString. "\r\n";
    $context = stream_context_create(array(
      'http' => array(
            'header'  => $header, 'ignore_errors' => '1' ),
      'https' => array(
            'header'  => $header, 'ignore_errors' => '1' )
       ));
    $url = WS_SERVER.(substr(WS_SERVER, 0, 5) == 'https' ? ":443" : "").WS_URL.$serviceURL;
    $res = file_get_contents($url, false, $context);
    if ($res !== false && (strpos($res, "faultstring") !== false || substr($res, 0, 6) == '<html>')) {
        echo "\n<div class=\"xg_msgFromServerError\">$res<br>url = $url</div>";
    }
    if ($res === false || strlen($res) == 0) {
        echo "\n<div class=\"xg_msgFromServerError\">Chyba, webova sluzba nevratila nic a/nebo vratila neznamou chybu. Jste spravne prihlaseni?<br>url = $url</div>";
    }

/*    $fp = fsockopen(WS_SERVER, WS_PORT);
    $res = "";
    if ($fp) {
        fputs($fp, "GET ".WS_URL."$serviceURL HTTP/1.1\nHost:".WS_SERVER.":".WS_PORT."\nConnection: close\n" .
                   "Authorization: ".$authString."\n\n");
        $hlav = 1;
        while (!feof($fp)) {
            $s = fgets($fp, 10000);
            if ($hlav == 1) {
                if ($s == "" || trim($s) == "") {
                    $hlav = 0;
                } else {
                    if (substr($s, 0, 4) != "HTTP") {
                        //header(trim($s));
                        //echo "HLAVICKA: ".$s."<br>";
                    }
                }
            } else {
                //echo $s;
                $res .= $s;
            }
        }
        fclose($fp);
    }*/

    return $res;

}

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0