| Autor | Zpráva | ||
|---|---|---|---|
| randy Profil * |
#1 · Zasláno: 8. 12. 2010, 18:02:53
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 |
#2 · Zasláno: 8. 12. 2010, 19:24:38
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');
} |
||
|
Časová prodleva: 15 let
|
|||
0