Autor Zpráva
Kordy
Profil *
Ahoj lidi,
nevíte náhodou, jestli existuje php funkce, která by uměla vypsat něco jako getallheaders(), ale tak, že si vyberu URL a ne interně? Konkrétně bych chtěl zjistit podporu gzip.

Díky za pomoc :)
Joker
Profil
Jestli to chápu, jde o získání hlaviček odpovědi na nějaký požadavek.

V tom případě musíte prostě odeslat ten požadavek třeba přes knihovnu cURL a pak přečíst co se vrátí.
N71
Profil *
V případě běžného HTTP(s) neexistuje případ, kdy by bylo nutné používat cURL na cokoliv. To jen na okraj.

Jinak ta funkce existuje: get_headers()
Tomášeek
Profil
N71:
Fakt, proč ta knihovna tedy existuje?

Možná mám v PHP mezery, ale jak se napr. přihlásis na cizi web se svým loginem bez curl?
Keeehi
Profil
Tomášeek:
No, dá se použít file_get_contents.
Tomášeek
Profil
Keeehi:
To si nejsem jistý.

Např. mám nějaký velkoobchodní e-shop, kde jsou ceny a skladové zásoby viditelné jen po loginu. Právě skladové zásoby potřebuju tahat cURLem, protože tento dovozce do Čech nemá žádné API, feed, nic, odkud bych skladovou dostupnost mohl vzít a zobrazit u sebe na webu pro koncového zákazníka (produkt se objedná u mě, ale odesílá se přímo od dovozce).

To je reálná zkušenost, kterou historicky mám (už teda ne, ale měl jsem) a vysílal se cURL požadavek s loginem a pak se parsovala stránka s dostupností produktů. Možná to šlo řešit i jinak, ale takto to bylo dostačující a posvěcené dovozcem. Jak bys to řešil bez cURLu, např. pomocí file_get_contents? Je to parametr context a fce stream_context_create() (koukám do manuálu, přiznám se, že neznám a jsem překvapen... myslel jsem, že jediná cesta je cURL, všude se doporučuje na fórech, např. SO na podobné tasky).
Kordy
Profil *
N71:
Jojo get_headers() je super už jsem se na ni koukal, ale já bych potřeboval zjistit podporu gzipu a ta tam podle dokumentace ani podle toho, co mi to vypisuje neni. Ale už jsi druhý, co mi to říká, kde dělám chybu? :o
www.php.net/manual/en/function.get-headers.php
Joker:
Jak bych to mohl zjistit pomocí, cURL? Navedl bys mě prosím?
Keeehi:
file_get_contents() mi asi nepomůže, když chci zjistit detaily z hlavičky, ne? :)
(a nemyslím <head></head>)
N71
Profil *
Tomášeek:
akt, proč ta knihovna tedy existuje?
Je to jen API nad systémovým cURL, na spoustě instalací PHP ani není k dispozici. V životě jsem curl funkce v PHP použil jen jednou, když bylo potřeba upravit parametry spojení a SSL handshaku. Jinak se dá vystačit s parametry kontextu streamu. Typický use-case vlastně neznám – pro úplně proprietární komunikaci se hodí spíš klasické socketové funkce, pro HTTP a FTP jsou jednodušší nástroje. Tohle je někde mezi.

Kordy:
ale já bych potřeboval zjistit podporu gzipu
Úplně spolehlivě to nezjistíš. Můžeš serveru říct jen "dej mi dokument XY, umím GZIP" a server ti ho pak může dát v tom GZIPu, pokud to umí a má to pro dokument XY povoleno.

Prostuduj si hlavičky Accept-Encoding a Content-Encoding
Kordy
Profil *
Jojo ty hlavičky znám, ležím v tom už druhý den a četl jsem už snad úplně všechno, co s tím sovisí... Problém je v tom, že tyhle hlavičky funkce get_headers() aspoň mě nevrací a podle dokumentace to ani nevypadá, že by měla. Co teď? :)
N71
Profil *
Pomocí stream_context_create přidej do funkce get_headers hlavičku Accept-Encoding a server ti vrátí Content-Encoding, pokud to bude umět.
RastyAmateur
Profil
N71:
Také jsem si to zkoušel a výsledek jsem nedostal. DJPW podle vývojářské konzole Content-Encoding vrací, ale mně se nevrátil ani s použitím toho, o čem píšeš.
N71
Profil *
Přemýšlím, jestli je na tohle použitelné jen stažení hlaviček. Funkce get_headers zavolá klasický HEAD požadavek, který by měl mít stejné hlavičky jako GET a prázdné body. Dokumentace ale není úplně jasná v tom, jestli jsou opravdu stejné.

Zkusil bych klasický file_get_contents a přečetl hlavičky z pole $http_response_header.
Kordy
Profil *
Až teď mi to došlo. Tohle teda trvalo... :D
Header se posílá pouze pokud něco obsahuje ;) takže pokud chci otestovat gzip, musím najít takový server, kde mi to tuto hodnotu vrací. Vrací se to dokonce i u get_headers(), neni třeba na to jít nijak složitě. Prostě jen někde ta hlavička neni.

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