Autor Zpráva
randy
Profil *
Zdravim,

mám takovej problém ohledně autentifikace přes CURL. Tímto kódem posílám požadavek:

  function login($username, $password, $url, $verbose)
  {
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_USERPWD, $username . ':' . $password);
      curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

      $rr = curl_exec($ch);
      if ($verbose) {
          echo '<pre>' . "\n";
          echo $rr;
          echo '</pre>' . "\n";
      }
      curl_close($ch);
  }

  login("user", "passw", 'http://www.example.com/login', 1);


Předem je nutno říci, že výše uvedený kód nelze měnit.

Poté se na požadované adrese zpracuje požadavek takto:

        if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) {
            if ($_SERVER['PHP_AUTH_USER'] == 'user' && $_SERVER['PHP_AUTH_PW'] == 'passw') {
                echo 'OK';
            }
        }


Tak, a toto nefunguje. Proměnné $_SERVER['PHP_AUTH_USER'] a $_SERVER['PHP_AUTH_PW'] nejsou vůbec dostupné.
Zajímavé ovšem je, že pokud jsem v předchozím skriptu provedl tuto změnu: curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
tak to projde. Bohužel jak jsem již říkal, první skript musí zůstat jak je, a je tedy potřeba udělat změnu na druhé straně. Napadlo mě, že by to mohlo být tím, že pokud je požadavek volán s parametrem CURLAUTH_ANY, server automaticky vybere nejsilnější typ autentifikace, a tak se zvolí například Digest. Nevím ovšem, jak server nastavit, aby používal pro tento případ Basic. Zkoušel jsem si sice hrát s nastavením serveru, s htaccessem, ale nepovedlo se.

Prosím o rady, pokud někdo víte čím by to mohlo být.

Díky
Davex
Profil
Posíláš správně HTTP hlavičky vynucující přihlášení? Něco jako:

if (empty($_SERVER['PHP_USER_NAME'])) {
    header('WWW-Authenticate: Basic realm="Tajna oblast"');
    header($_SERVER['SERVER_PROTOCOL'] . ' 401 Unauthorized');
}

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