Autor | Zpráva | ||
---|---|---|---|
Kordy Profil * |
#1 · Zasláno: 29. 7. 2019, 12:28:44
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 |
#2 · Zasláno: 29. 7. 2019, 13:33:50
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 * |
#3 · Zasláno: 30. 7. 2019, 12:30:58
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 |
#4 · Zasláno: 30. 7. 2019, 16:45:17
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 |
#5 · Zasláno: 30. 7. 2019, 19:24:38
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 cURL em, 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 cURL u, 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 * |
#7 · Zasláno: 30. 7. 2019, 22:11:53
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 * |
#8 · Zasláno: 31. 7. 2019, 12:04:28
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 * |
#9 · Zasláno: 31. 7. 2019, 21:46:25
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 * |
#10 · Zasláno: 1. 8. 2019, 08:22:50
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 |
#11 · Zasláno: 1. 8. 2019, 08:56:24
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 * |
#12 · Zasláno: 1. 8. 2019, 09:19:02
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 * |
#13 · Zasláno: 1. 8. 2019, 13:38:52
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. |
||
Časová prodleva: 6 let
|
0