[ boccio @ 14.01.2004. 21:35 ] @
gospodo, imam (interesantan) problem.

Evo plasticnog primera. Treba da kreiram skript koji ce da za zadati termin, recimo "bla bla truć" da pvetvazi gugl, i storuje recimo sve url-ove u nekakav niz. Drugi deo problema (parsovanje strane) je prica za sebe, fokus mi je trenutno na prvom delu. (napomena: zanemariti cinjenicu da bi se u ovom primeru sa guglom koristio GET metod; ovako mi je najjednostavnije da objasnim).

dakle, skript uzima kljucnu rec, i sta onda?
salje POST zahtev guglu? ok, lako ja napravim <form action...> ali tako cu dobiti rezultat u brauzer, a meni treba da ga dobijem u nekakav, recimo fajl, koji cu da obradim...
kako da ja "zavaram" gugl da rezultat POST zahteva (dakle, prakticno kompletnu HTML stranicu) vrati mom skriptu kao fajl?


thx na razmisljanjima koje cete, nadam se, podeliti sa mnom...



[Ovu poruku je menjao -zombie- dana 15.01.2004. u 16:15 GMT]
[ ddz @ 14.01.2004. 21:59 ] @
http://www.devshed.com/c/a/PHP...-The-Google-Web-APIs-With-PHP/
[ boccio @ 14.01.2004. 22:08 ] @
neeeee.....neeeeee....gugl je samo primer. cisto reda radi, to sto ja radim nema nikakve veze sa guglom....yebiga, izgleda nisam lepo objasnio...

aj kad je vec tako, da konkretno kazem o cemu se radi. pravim skript za SE rangiranje. treba da query-ujem inventory.overture.com/d/searchinventory/suggestion/ , recimo sa "drugs & alcohol" :) e, sad, on mi vraca rezultat sa najcesce pretrazivanim terminima: alcohol and drug abuse, alcohol and drug treatment, alcohol and drug addiction, i tako dalje. ja hocu da pokupim sve te "most used" pretrage, ali da bih to uradio prvo treba da putem mog skrpta dobijem tu stranicu da bih je, jel'te, parsovao...
dakle, kako da dobijem (kompletnu html) stranicu sa rezultatima pretrage?
[ markom @ 14.01.2004. 22:18 ] @
Totalno na brzinu:

Code:
function PokupiURL($HOST, $FILE)
        $url = "http://" . $HOST . "/" . $FILE;

        $f = fsockopen($HOST, 80);

        $m  = "var1=$var1";
        $m .= "&var2=$var2";
        $m .= "&var3=$var3";
        $m .= "\r\n";

        $len = strlen($m) - 2;

        $s  = "POST $url HTTP/1.1\r\n";
        $s .= "Accept: */*\r\n";
        $s .= "Content-Type: application/x-www-form-urlencoded\r\n";
        $s .= "Host: $HOST\r\n";
        $s .= "Connection: close\r\n";
        $s .= "Content-length: $len\r\n";
        $s .=  "\r\n";

        $s .= $m;

        fputs($f, $s);

        while (!feof($f)) {
                $s = fgets($f, 4096);
        $result .= $s;
    }
    fclose($f);
    return $result;
}
[ boccio @ 14.01.2004. 22:31 ] @
da, ovako od oka mi deluje da bi to trebalo da radi posao... :) cak me malkice i sramota jer cela procedura ne deluje nesto komplikovano...

p.s. dodjem pivo...thx
[ Goran Rakić @ 14.01.2004. 22:54 ] @
obavezno koristi HTTP1.0 ako nećeš da imaš posla sa chunked odgovorima.
[ alex @ 15.01.2004. 00:01 ] @
... ili jednostavno koristi cURL ( http://curl.haxx.se ):

Citat:

libcurl is a solid and reliable multi-protocol file transfer library for URL syntax defined files. We can take advantage of libcurl straight from within our PHP programs. Curl is supported built-in since PHP 4.0.2, no extra stuff is needed but the PHP and curl packages.


Basic HTTP POST operation:
Code:

<?php
//
// A very simple PHP example that sends a HTTP POST to a remote site
//

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,"http://www.mysite.com/tester.phtml");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "postvar1=value1&postvar2=value2&postvar3=value3");

$result_page = curl_exec ($ch);
curl_close ($ch); 
?>


Pozdrav,
alex.
[ boccio @ 15.01.2004. 07:53 ] @
hm...do sada nisam koristio cURL. Mozda je ovo pravi momenat da pocnem :) Puno hvala na savetu i primeru, u svakom slucaju.
[ -zombie- @ 15.01.2004. 14:20 ] @
ili ako curl extenzija nije uključena, snoopy klasu http://snoopy.sourceforge.net/ (a ima još par php klasa koje rade isto, potraži ako ti zatreba..)
[ leka @ 15.01.2004. 16:22 ] @
Naravno Alex, curl je ono sto treba coveku, jos samo da sedne za PHP
manual i nauci curl funkcije ... :)
[ boccio @ 15.01.2004. 19:58 ] @
pa dobro, uvek postoji prvi put... :) do sada mi nije trebao...sto ne znaci da necu da sednem za manual i procesljam ga...
[ boccio @ 16.01.2004. 13:11 ] @
posle par sati experimentisanja mogu samo da kazem jedno: ovaj curl je majka!

@alex: hvala na sugestiji...
[ alex @ 16.01.2004. 14:11 ] @
Nema na cemu.. Posle par godina aktivnog iskustva sa cURL-om moram da napomenem da je cURL stvarno i tata i mama..

Da ne pominjem da moze da se koristi i za HTTPS? U firmi smo ga koristili za pristup bankama u nekoliko projekata..

Stvarno odlicna stvar!
[ slempl @ 19.09.2006. 10:16 ] @
Je brate, mama i tata... ja sam ga koristio ali mi sad na novoj instalaciji šteka.... neće đubre od apačija da ga učita pri restartu...
Bio sam u php.ini fajlu i odkomentirao potrebnu extenziju ali sad mi javi pri restartu apačija da nemože da nađe php modul
php_curl.dll
ja sam taj dll kopirao točno na mjeto gdje ga on traži ali opet ista greška...

Ako je netko riješio ili imao sličan problem nek mi se javi... tnx....
[ diplomata @ 23.09.2006. 07:57 ] @
boccio moras OBAVEZNO probati i snoopy klasu. Radi odlicno.
Ja na nekim hostovima nisam mogao da koristim cURL, a snoopy je radio sav posao.

Najbitnije je to sto bez problema "prolazi" sve formove na nekom sajtu. Sa POST radi savrseno.
[ Nemanja Avramović @ 23.09.2006. 20:58 ] @
Koliko se sećam meni Snoopy nije radio sa https protokolom bez cURL-a, ali i pored toga se slažem da je odlična klasa...
[ dinke @ 23.09.2006. 21:33 ] @
A jel provalio iko od vas da je boccio ovo pitao u januaru 2004-te godine ?

Elem, ja sam nedavno izbacio curl klasu (oop wrapper) koji podrzava slanje get/post zahteva, snimanje kukija, setovanja referera, bindovanje na odredjeni ip iz pool-a i sl. stvarcice, pa ako nekome treba, moze da skine ovde.
[ Sasa Kostic @ 23.09.2006. 21:53 ] @
Citat:
dinke: A jel provalio iko od vas da je boccio ovo pitao u januaru 2004-te godine ?

Elem, ja sam nedavno izbacio curl klasu (oop wrapper) koji podrzava slanje get/post zahteva, snimanje kukija, setovanja referera, bindovanje na odredjeni ip iz pool-a i sl. stvarcice, pa ako nekome treba, moze da skine ovde.


hah.. ja uooopste nisam video :-)

Btw.. za https moras cURL da imas instaliran da bi radio Snoopy (za https)