[ NrmMyth @ 16.05.2006. 11:23 ] @
Zanima me kako funkcionira POST method u HTTP-u.

Zelim napisati program koji ce nekoj php skripti prenjeti odredjene podatke POST metodom, a da ne pravim web formu.
To se najlakse opise kao "program koji simulira submitanje."

I ne ovo nije namjenjeno za spamming.

Hvala.

------
Mozda sam pogrijesio forum, ali smatram da ovdje ima pametnih ljudi, pa sam ovdje stavio. Ako smeta, neka se prebaci.
[ Dragi Tata @ 16.05.2006. 11:39 ] @
Ako pitaš za .NET način da to uradiš, koristi HttpWebRequest klasu. Postavi Method propertz na "POST" a sadržaj piši u stream dobijen preko GetRequestStream().
[ NrmMyth @ 16.05.2006. 16:18 ] @
Pogledati cu, pa javiti jeli mi to treba.
[ NrmMyth @ 16.05.2006. 21:48 ] @
Citat:
FORM has one required attribute, ACTION, specifying the URL of a CGI script which processes the form and sends back feedback. There are two methods to send form data to a server. GET, the default, will send the form input in an URL, whereas POST sends it in the body of the submission. The latter method means you can send larger amounts of data, and that the URL of the form results doesn't show the encoded form.

Prvo.
Sta ovo crveno znaci?
GET samo modificira URL, ali nije mi jasno dali onda POST posalje jos neki fajl ili sto?

[Ovu poruku je menjao NrmMyth dana 16.05.2006. u 22:57 GMT+1]
[ djordjeno @ 17.05.2006. 08:14 ] @
Pozdrav,

POST metod parametre salje u telu (contentu) u HTTP odgovoru.
Dakle nije kao GET koji parametre prosledjuje u URL-u.

Nacin (format) zapisivanja parametara je isti kao kod GET metoda.




[Ovu poruku je menjao djordjeno dana 17.05.2006. u 09:15 GMT+1]
[ jablan @ 17.05.2006. 08:28 ] @
To crveno znači da, nakon što pošalje skup request headera, klijent pošalje i jednu gomilu podataka koji su ustvari POST parametri. Na ovaj način parametri se ne vide u URLu i zgodniji je za prenos veće količine podataka.

Da bi ti bilo jasnije, skini npr. http://www.fiddlertool.com/fiddler/ i tu ćeš videti šta tvoj brauzer šalje serverima u post zahtevu dok surfuješ. Istu tu stvar posle simuliraš iz .NETa na način koji ti je DT opisao.
[ NrmMyth @ 17.05.2006. 15:40 ] @
Citat:
jablan: klijent pošalje i jednu gomilu podataka koji su ustvari POST parametri.

Kako posalje, preko datoteke ili kako?

Citat:
Da bi ti bilo jasnije, skini npr. http://www.fiddlertool.com/fiddler/ i tu ćeš videti šta tvoj brauzer šalje serverima u post zahtevu dok surfuješ. Istu tu stvar posle simuliraš iz .NETa na način koji ti je DT opisao.

Fidler mi ne funkcionira; integrira se u IE, ali ne prati nista... ??
[ jablan @ 17.05.2006. 16:03 ] @
Evo ti više o HTTP protokolu, mada mislim da nema potrebe da se unosiš toliko:
http://www.ietf.org/rfc/rfc2068.txt

Jednostavno nađi na netu (ili u MSDN) primer kako se pravi POST request iz .NETa i to je to...

Ne znam zašto ti Fiddler ne radi, meni radi.
[ NrmMyth @ 17.05.2006. 18:22 ] @
Naisao sam vec na ovaj link surfacjuci za objasnjenjem POST-a, no u njemu nije nista objasnjeno.
Citat:
jablan:Jednostavno nađi na netu (ili u MSDN) primer kako se pravi POST request iz .NETa i to je to...
Nasao sam vec nesto, ali jos uvijek me zanima kako to radi.
Ne mogu krenuti dalje dok ne shvatim kako POST tehnicki funkcionira.
Kada bi zelio obaviti POST sam "na ruke", zanima me kako bi to izveo.
[ mmix @ 18.05.2006. 14:36 ] @
Tehnicki to izgleda ovako:

1. Otvoris socket konekciju na (npr) www.mojsajt.com port 80
2. Po otvaranju konekciju dumpujes sledeci sadrzaj na konekciju:

Citat:

POST /loginpage.asp HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: en-us
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Host: www.mojsajt.com
Content-Length: 31
Proxy-Connection: Keep-Alive
Pragma: no-cache


txtLoginID=mmix;password=123456


Crveno je HTTP request (obavezno), da bi se znalo koji resurs se trzi (ovde je login.asp stranica)
Plavo su http headers, nisu obavezni ali pomazu serveru da zna kako da ti servira zeljeni resurs
Bold je POST paket za koji ti pitas, kombinacija "promenljiva=vrednost" elemenata razdvojenih sa ;. Ukupna duzina POST paketa mora da se upise u Content-Length header da bi server znao gde je kraj kad je HTTP request fragmentiran.

Server ce potom procesirati sta treba i kroz istu konekciju ti vratiti http response:

Citat:

HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Thu, 18 May 2006 13:25:13 GMT
Pragma: no-cache
Content-Length: 16230
Content-Type: text/html
Expires: Thu, 18 May 2006 13:24:13 GMT
Cache-control: no-cache


<html>
<!--ovde je sad HEAD, BODY, etc, etc, celokupan sadrzaj HTML-a -->
</html>




[ Dragi Tata @ 18.05.2006. 15:51 ] @
Citat:
jablan:
Da bi ti bilo jasnije, skini npr. http://www.fiddlertool.com/fiddler/ i tu ćeš videti šta tvoj brauzer šalje serverima u post zahtevu dok surfuješ.


Mnogo dobra alatka! Hvala, Jablane.
[ mmix @ 18.05.2006. 17:15 ] @
Citat:
Dragi Tata: Mnogo dobra alatka! Hvala, Jablane.


Definitivno. Do sada sam ovo resavao kroz local-proxy emulaciju. Ova alatka je mnogo bolja i potpuno je transparentna i ne zahteva nikakvo rekonfigurisanje IE-a, a uz rpaSpy mogu da vidim i HTTPS headere sto je do sad bilo nemoguce. Hvala i odavde.
[ NrmMyth @ 18.05.2006. 22:33 ] @
Odlicno mmix, hvala.
Informirati cu se pa javiti rezultat.

Pozdrav.
[ mmix @ 19.05.2006. 12:45 ] @
Citat:
NrmMyth:�Odlicno mmix, hvala.
Informirati cu se pa javiti rezultat.

Da se razumemo, ni ja ti ne preporucujem da se sam igras sa soketima, niti bih znao kako to da izvedes u PHP-u (mozes da pitas u tom forumu). Moj post je bio cisto informativnog karaktera da vidis kako to izgleda low-level.
Moja pretpostavka je da PHP verovatno ima neku alternativu HttpWebRequest-u koji mozes da iskoristis. Veoma je zamarajuce sam generisati celokupno telo HTTP request-a, i obracunavati sve hedere koji treba da se proslede uz post, i paziti da li masina ide kroz proxy ili ne, i da li ce proksi ili udaljeni server da ti vrate "407 Authentication Required", etc, etc, etc.
[dodato] E i da, da ne zaboravim da na kraju moras sam da parsiras response rezultat i hedere i da se adaptiras odgovoru sto je dodatna petljancija.[kraj dodatog ]
Kada bi pokrio sve mogucnosti koje HTTP protokol omogucava dobio bi u principu WinInet.dll fajl koji vec ide uz windows. Bolje iskoristi vec postojece resenje.



[Ovu poruku je menjao mmix dana 19.05.2006. u 13:49 GMT+1]
[ NrmMyth @ 19.05.2006. 14:25 ] @
Razumijem te.
No meni je sad kad poznam teoriju puno lakse pisati rijesenje problema, mrzim kad moram koristiti na slijepo klase (a to rijetko radim).