Zadejte hledaný výraz...

Pomoc s objasněním header()

David Musil
verified
rating uzivatele
(69 hodnocení)
12. 5. 2016 14:34:12
Ahoj,
můžeme mě prosím přivést na správnou myšlenku ohledně použití header()? Jak je možné, že API vrátí header(204), což je v kódu definováno jako situace, když neprojde hned úplně první podmínka isset($_SERVER)? Kód se stejně provede a pokud $_SERVER vypíšu, tak hodnotu v sobě mají přesně takovou jako mají mít. Dělá to na mě dojem, že to sice vrátí header, že první podmínka neprojde, jenže ten kód uvnitř API se provede, jako kdyby to prošlo.
Asi si tu funkci vykládám špatně, protože i když si změním to user name a heslo, aby se neshodovalo, stejně mi to pořád hází zpátky 204ku a k té 401 se to ani nedostane.
Není mi jasné, jakou logikou se vrací hlavičky...
V jednom souboru mám CURL dotaz na API:
$url = 'http://localhost/server00/MY_API/objects/2/';
$header = array('Accept: application/json');
$user = 'admin';
$pass = 'pass';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, "$user:$pass");
$statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$response = curl_exec($ch);
if ($response === false) {
$statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
echo $statusCode . 'not connected
';
} else {
echo $response . "
";
echo get_headers($url);
}
Ve druhém souboru dávám právě dohromady API
if (isset($_SERVER) && (isset($_SERVER))) {
if (($_SERVER != "admin") || ($_SERVER != "pass")) {
http_response_code(401);
}
else {
//http_response_code(200);
require_once 'config/Database.php';
require_once 'class/classObject.php';
if ($connectDatabase) {
//OBSAH KTERY SE PROVEDE!
}
else {
$result = array('status' => 400, 'alert' => 'Unknown database');
echo json_encode($result);
}
}
}
else {
http_response_code(204);
}
Díky za pomoc :)
12. 5. 2016 14:34:12
https://webtrh.cz/diskuse/pomoc-s-objasnenim-header#reply1195463
TomasX
verified
rating uzivatele
(4 hodnocení)
12. 5. 2016 14:54:05
a opravdu jsi správně kontroloval co obsahuje PHP_AUTH_USER a PHP_AUTH_PW?
dej si tam debug správy a vypisuj třeba někam do konzule nebo na výstup, ať vidíš co se provedlo s jakými parametry. Ten kód vypadá v pořádku.
12. 5. 2016 14:54:05
https://webtrh.cz/diskuse/pomoc-s-objasnenim-header#reply1195462
David Musil
verified
rating uzivatele
(69 hodnocení)
12. 5. 2016 15:34:07
Kontroloval jsem to tak, že jsem si vypsal komlet $_SERVER přes print_r. Opravdu tam byl obsah, který předávám přes CURL.
A on opravdu se ten kód provede správně, takže to projde jak přes isset, tak přes to ověření, zda jsou přístupy správné. Ale vždycky mi to vrátí tu hlavičku, jakoby prvotní isset() neprošel.
EDIT: Jeste dodatek, ze kdyz odstranim "else" u prvni podminky, tak opet probehne cely kod v poradku, akorat to vrati 200, i kdyz je tam zakomentovana... pro me zahada
12. 5. 2016 15:34:07
https://webtrh.cz/diskuse/pomoc-s-objasnenim-header#reply1195461
ViPErCZ
verified
rating uzivatele
(21 hodnocení)
12. 5. 2016 16:28:10
No není se čemu divit, když zavoláš tu adresu znova: echo get_headers($url);
Tohle ti normálně otevře tu adresu bez curl a vrátí ti to response code. Takže ti isset logicky neprojde :-)
Vyhodnocuj už rovnou to curl volání přes curl_getinfo jako to máš v podmínce nad tím s if ($response === false) {
12. 5. 2016 16:28:10
https://webtrh.cz/diskuse/pomoc-s-objasnenim-header#reply1195460
David Musil
verified
rating uzivatele
(69 hodnocení)
12. 5. 2016 16:34:35
Napsal ViPEr*CZ*;1291515
No není se čemu divit, když zavoláš tu adresu znova: echo get_headers($url);
Tohle ti normálně otevře tu adresu bez curl a vrátí ti to response code. Takže ti isset logicky neprojde :-)
Vyhodnocuj už rovnou to curl volání přes curl_getinfo jako to máš v podmínce nad tím s if ($response === false) {
Haha, no jasne... Vzdyt ono se to volalo znova... Diky moc.
12. 5. 2016 16:34:35
https://webtrh.cz/diskuse/pomoc-s-objasnenim-header#reply1195459
David Musil
verified
rating uzivatele
(69 hodnocení)
12. 5. 2016 16:50:20
Jeste me napada, kdyz si do CURL pridam token:
$header = array('Accept: application/json', 'Authorization: ' . $token);
Jak pak probiha to overeni na strane API? Respektive, jak se tam zpracovava tahle cast dotazu a jak k tomu pristoupit? Dostanu se k tomu nejak pres HTTP_HEADER?
Protoze nyni, kdyz tuhle hlavicku do CURL pridam, uz se v tom API nic nedeje, takze pocitam, ze je to prave kvuli nutnosti doplnit to overeni.
12. 5. 2016 16:50:20
https://webtrh.cz/diskuse/pomoc-s-objasnenim-header#reply1195458
ViPErCZ
verified
rating uzivatele
(21 hodnocení)
12. 5. 2016 18:39:48
Jo jo musíš si to programátorsky udělat sám.
Napsal musil.david;1291520
Jeste me napada, kdyz si do CURL pridam token:
$header = array('Accept: application/json', 'Authorization: ' . $token);
Jak pak probiha to overeni na strane API? Respektive, jak se tam zpracovava tahle cast dotazu a jak k tomu pristoupit? Dostanu se k tomu nejak pres HTTP_HEADER?
Protoze nyni, kdyz tuhle hlavicku do CURL pridam, uz se v tom API nic nedeje, takze pocitam, ze je to prave kvuli nutnosti doplnit to overeni.
---------- Příspěvek doplněn 12.05.2016 v 18:41 ----------
No asi tak byla moje reakce, když jsem na to za 5 minut přišel. Normálně tu funkci denně nepoužívám, takže pomohla až dokumentace. ;-)
Napsal musil.david;1291517
Haha, no jasne... Vzdyt ono se to volalo znova... Diky moc.
12. 5. 2016 18:39:48
https://webtrh.cz/diskuse/pomoc-s-objasnenim-header#reply1195457
David Musil
verified
rating uzivatele
(69 hodnocení)
12. 5. 2016 19:42:54
Napsal ViPEr*CZ*;1291538
Jo jo musíš si to programátorsky udělat sám.
---------- Příspěvek doplněn 12.05.2016 v 18:41 ----------
No asi tak byla moje reakce, když jsem na to za 5 minut přišel. Normálně tu funkci denně nepoužívám, takže pomohla až dokumentace. ;-)
jj, je mi jasne, ze to musim udelat, ale zatim jsem nedohledal zpusob, jak ten token overit na strane API
12. 5. 2016 19:42:54
https://webtrh.cz/diskuse/pomoc-s-objasnenim-header#reply1195456
ViPErCZ
verified
rating uzivatele
(21 hodnocení)
12. 5. 2016 20:47:56
Zkus třeba: var_dump(getallheaders());
Mělo by to být pod tím samým indexem v tomto poli.
Nebo by mělo fungovat i:
// Replace XXXXXXXXXXXXXXXX with the name of the header you need
$headerStringValue = $_SERVER;
Případně pak celá diskuze: http://stackoverflow.com/questions/541430/how-do-i-read-any-request-header-in-php
Napsal musil.david;1291557
jj, je mi jasne, ze to musim udelat, ale zatim jsem nedohledal zpusob, jak ten token overit na strane API
12. 5. 2016 20:47:56
https://webtrh.cz/diskuse/pomoc-s-objasnenim-header#reply1195455
David Musil
verified
rating uzivatele
(69 hodnocení)
12. 5. 2016 23:05:33
Napsal ViPEr*CZ*;1291565
Zkus třeba: var_dump(getallheaders());
Mělo by to být pod tím samým indexem v tomto poli.
Nebo by mělo fungovat i:
// Replace XXXXXXXXXXXXXXXX with the name of the header you need
$headerStringValue = $_SERVER;
Případně pak celá diskuze: http://stackoverflow.com/questions/541430/how-do-i-read-any-request-header-in-php
Ja si hlavne myslim, ze je to nespojitelne s tim AUTH_USER a AUTH_PASS, ktere uz pouzivam. To je metoda overeni, ktera funguje. Ten token podle me s timhle neni spojitelny, ale treba se pletu.
Protoze jakmile tu hlavicku s tokenem poslu do API, tak to API nevykona vubec zadnou cinnost = proste nepracuje. Takze tam ani nemohu provest nejake kontrolni vypisy, ktere jsi navrhoval, nebo ktere jsem se docetl ve zminene diskuzi na stackoverflow.
Zkusim polozit dalsi dotaz.
12. 5. 2016 23:05:33
https://webtrh.cz/diskuse/pomoc-s-objasnenim-header#reply1195454
ViPErCZ
verified
rating uzivatele
(21 hodnocení)
13. 5. 2016 08:07:39
No nevím, ale mě to funguje. Já si normálně token odešlu.
$url = 'http://localhost/test6.php';
$header = array('Accept: application/json');
$user = 'admin';
$pass = 'pass';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, "$user:$pass");
$token = "viper";
$header = array('Token: ' . $token);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
$statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$response = curl_exec($ch);
if ($response === false) {
$statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
echo $statusCode . 'not connected
';
} else {
echo $response . "
";
echo get_headers($url);
}
a v test6.php mám:
var_dump($_SERVER);
Když to pustím do konzole, tak na výstupu vidím, že se mi vypsal token jako řetězec "viper". Evidentně děláš zase něco špatně a nebo jsi to ani nezkoušel. :-D
Napsal musil.david;1291586
Ja si hlavne myslim, ze je to nespojitelne s tim AUTH_USER a AUTH_PASS, ktere uz pouzivam. To je metoda overeni, ktera funguje. Ten token podle me s timhle neni spojitelny, ale treba se pletu.
Protoze jakmile tu hlavicku s tokenem poslu do API, tak to API nevykona vubec zadnou cinnost = proste nepracuje. Takze tam ani nemohu provest nejake kontrolni vypisy, ktere jsi navrhoval, nebo ktere jsem se docetl ve zminene diskuzi na stackoverflow.
Zkusim polozit dalsi dotaz.
13. 5. 2016 08:07:39
https://webtrh.cz/diskuse/pomoc-s-objasnenim-header#reply1195453
Pro odpověď se přihlašte.
Přihlásit