Autor | Zpráva | ||
---|---|---|---|
Yuhů Profil |
#1 · Zasláno: 1. 2. 2005, 04:12:19
Potřebuju si skriptem stáhnout vzdálenou stránku (zadanou jako parametr).
Když použiju funkci FOpen($stranka, "r"), tak to dostanu bez HTTP hlaviček. V mém případě mě ale zajímají zrovna hlavičky. Pokud použiju funkci FSockOpen($hostname, 80) // 80 je port tak sice http hlavičky dostanu, ale zase nemůžu zadat obecnou adresu. Jak přeštu skriptem hlavičky odpovědi požadavku na vzdálené URL? |
||
llook Profil |
#2 · Zasláno: 2. 2. 2005, 18:08:57
Myslím, že na tohle žádná vestavěná funkce není. Je akorát možné rozparsovat tu URL a pak použít fsockopen.
$url = parse_url('http://jakpsatweb.cz/'); $fp = fsockopen($url['host'], (isset($url['port']) ? $url['port'] : 80)); fwrite($fp, 'GET '.(isset($url['path']) ? $url['path'] : '/')' HTTP/1.0'."\r\n"); // atd... |
||
Leo Profil |
#3 · Zasláno: 2. 2. 2005, 19:05:18
"tak sice http hlavičky dostanu, ale zase nemůžu zadat obecnou adresu."
Nechapu, fsockopen muze oslovit jakoukoliv adresu, akorat ten HTTP pozadavek musis vytvorit. Jinak v teto souvislosti se v PHP pouziva udelatko jmenem curl, ale nemam s nim zkusenost, Leo |
||
Yuhů Profil |
#4 · Zasláno: 2. 2. 2005, 20:14:29 · Upravil/a: Yuhů
llooku, díky moc, začínám to chápat,
můžeš prosím rozvést to svoje // atd... ? Jak vidíš, se sockety a fsockopen() nemám tolik zkušeností. Normálně potom můžu z $fp číst? |
||
Leo Profil |
#5 · Zasláno: 2. 2. 2005, 20:19:44
$host = "www.neco.cz";
$port = 80; $fp = fsockopen($host,$port); if ($fp) { fputs($fp,"GET /stranka.html HTTP/1.0\r\nHost: $host\r\nUser-Agent:Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)\r\n\r\n"); while ($line=fgets($fp,2048)) { echo $line; } } Leo |
||
Leo Profil |
#6 · Zasláno: 2. 2. 2005, 20:20:38
HTTP/1.1, Leo
|
||
Leo Profil |
#7 · Zasláno: 2. 2. 2005, 20:21:30
Jinak pokud te zajimaji hlavicky mozna bys mohl pouzit HEAD misto GET, Leo
|
||
llook Profil |
#8 · Zasláno: 4. 2. 2005, 20:51:43
"//atd..." znamená že prostě do socketu odešlu celý požadavek pomocí fwrite a pak načtu odpověď pomocí fread.
A jak správně doplnil Leo, měl bych si předtím ještě ověřit, jestli se socket podařilo otevřít:
|
||
Časová prodleva: 19 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0