Hakee sivun netistä välittäen sille myös jopa POSTdataa ja keksejä. GET-datat toimii tietty myös.
Tiedot kannattaa urlencodettaa. Itelläni ku testasin niin "kaks=jee yks kaks kol" toimi kyllä. Varmuuden vuoksi laittasin tiedot kuitenkin urlencode():n läpi.
Headereihin voi siis itekin lisätä kaikenlaista esim refereriä ym. heittämällä tohon servulle lähetettävään stringiin ne oikeaan kohtaan.
Palauttaa koko http-vastauksen, eli sivun ja sitä ennen servun http-headerit (?)
<? function hae_sivu($urli, $tieto, $keksit) { $parsetus = parse_url($urli); $servu = $parsetus["host"]; // server itse $sivu = $parsetus["path"]; /* olisi helpompi tehdä antamalla funkkarille parametreinä erikseen serveri ja haettava urli, mutta tämä tapa on käyttäjäystävällisempi :) */ if ($parsetus["query"]) $sivu .= "?$parsetus[query]"; if ($parsetus["fragment"]) $sivu .= "#$parsetus[fragment]"; $pituus = strlen($tieto); $yhteys = fsockopen($servu, 80); // avataan yhteys serveriin // heitetään servulle ihan perus http-sivupyyntö fputs($yhteys, "POST $sivu HTTP/1.1\r\n" . // huomaa: POST eikä GET "Host: $servu\r\n" . // sisältötyyppinä url-enkoodattu lomaketieto "Content-Type: application/x-www-form-urlencoded\r\n" . // lomaketiedon pituus pitää kertoa "Content-Length: $pituus\r\n" . "User-Agent: PHP\r\n" . "Cookie: $keksit\r\n" . "Connection: Close\r\n\r\n$tieto"); // haetaan sivun sisältö. 30 on jostain syystä nopea pufferin koko tässä while (!feof($yhteys)) $vastaus .= fgets($yhteys, 30); fclose($yhteys); // yhteys kii return $vastaus; } // käyttöesimerkki. tällä testasin että toimii. heitä tää menemään :) echo hae_sivu("http://localhost/~sooda/foo/postdata2.php?yks=111", "kaks=222", "kol=333"); ?>
tällä testasin että varmaan toimii
<?php echo "$_GET[yks]foo$_POST[kaks]foo$_COOKIE[kol]"; ?>
lainaus:
echo "lolts $sivu";
hmm... Mikäköhän merkitys tuolla mahtaa olla :)
Oho. Kiitti T.M. :D jäi testausvaiheessa siihen. En huomannut ottaa pois :) Nyt se on vek.
Ihan hieno, tosin voisit käyttää koodissasi tyhjiä rivinvaihtoja selkeyttämään sitä. Lisäksi itselläni tuli ainakin seuraavat huomautukset:
lainaus:
Notice: Undefined index: fragment in ./http_test.php on line 10
Notice: Undefined variable: host in ./http_test.php on line 15
Notice: Undefined variable: vastaus in ./http_test.php on line 23
Ainiin... voisit laittaa vielä User-Agent -kohdan headereihin, sillä jotkin palvelimet vaativat sen ehdottomasti (kuten omani).
Lisäsin useragentin ja korjasin ton $host -> $servu.
Vaihtoehtoisesti sitten tietenkin libcurl.
HTTP-otsikoita voi lisätä myös file_get_contents-funktiolle (ks. stream_context_create), ja vastauksen otsikot löytyvät sen jälkeen muuttujasta $http_response_header.
Aihe on jo aika vanha, joten et voi enää vastata siihen.