Delphi7+Synapse+Cookies
Delphi7+Synapse+Cookies
Pouzivam Delhi7 so synapse kniznicami pre odoslanie nejakych udajov do formulara na web stranke.
- cez funkciu HttpPostUrl poslem udaje do formulara a naspat mi funkcia posle cookie, teda ci sa podarilo prihlasit.
- ked hned nato znova poslem cez HttpPosturl udaje do druheho formulara na tej stranke, tak dostanem odpoved ze uz niesom prihlaseny, cize hned ako som som prvy krat prihlasil cez HttpPostUrl, tak cookie sa vymazalo.
-vedel by sa niekto nato pozriet ako nastavit tej funkcii aby to Cookie nevymazavala? ale vymazalaho az ked ja budem potrebovat?
-skusal som rozne pozmenit kod, ale nic mi nepomohlo, nakolko sa do delphi az tak nevyznam a v tych ich knizniciach sa vyznam fakt len strucne.
Zdroj: http://synapse.ararat.cz/
http://synapse.ararat.cz/files/synapse.zip
thnx.
- cez funkciu HttpPostUrl poslem udaje do formulara a naspat mi funkcia posle cookie, teda ci sa podarilo prihlasit.
- ked hned nato znova poslem cez HttpPosturl udaje do druheho formulara na tej stranke, tak dostanem odpoved ze uz niesom prihlaseny, cize hned ako som som prvy krat prihlasil cez HttpPostUrl, tak cookie sa vymazalo.
-vedel by sa niekto nato pozriet ako nastavit tej funkcii aby to Cookie nevymazavala? ale vymazalaho az ked ja budem potrebovat?
-skusal som rozne pozmenit kod, ale nic mi nepomohlo, nakolko sa do delphi az tak nevyznam a v tych ich knizniciach sa vyznam fakt len strucne.
Zdroj: http://synapse.ararat.cz/
http://synapse.ararat.cz/files/synapse.zip
thnx.
mno tie cookies dostanem ako Tstringlist, mno ako ich potom vlozit do nasledujucej ziadosti? hmm, skusim sa nato pozriet ale pochybujem ze to tam najdem...chrono napísal:Cookies ti prídu v http hlavičke odpovede. Ti ich odtiaľ musíš vybrať a pri ďalšom kontakte so serverom tie cookies vložíš do http hlavičky žiadosti.
toto je ta HttpPostUrl funkcia:
Kód: Vybrať všetko
function HttpPostURL(const URL, URLData: string; const Data: TStream): Boolean;
var
HTTP: THTTPSend;
begin
HTTP := THTTPSend.Create;
try
WriteStrToStream(HTTP.Document, URLData);
HTTP.MimeType := 'application/x-www-form-urlencoded';
Result := HTTP.HTTPMethod('POST', URL);
if Result then
Data.CopyFrom(HTTP.Document, 0);
finally
HTTP.Free;
end;
end;Budeš si musieť urobiť podobnú funkciu ako je HttpPostURL. Budeš tam musieť pridať aj možnosť pridávania položiek do HTTP hlavičky (alebo aspoň cookies).
Keď tak na to pozerám, stačilo by, ak by si si vytvoril objekt THTTPSend a používal ten. Ak pomocou neho načítaš stránku, budú tam uložené aj cookies a pri ďalšej žiadosti o stránku sa automaticky odošlú. Funkcia HttpPostURL pri každom použití vytvorí nový THTTPSend objekt, ktorý nemá cookies nastavené.
// chrono: Ak budeš robiť podobnú funkciu ako je HttpPostUrl budeš musieť nastaviť cookies ešte pred Result := HTTP.HTTPMethod('POST', URL); Pred ten riadok pridat HTTP.Cookies := cookies; (cookies by mal byť TStringList)
Keď tak na to pozerám, stačilo by, ak by si si vytvoril objekt THTTPSend a používal ten. Ak pomocou neho načítaš stránku, budú tam uložené aj cookies a pri ďalšej žiadosti o stránku sa automaticky odošlú. Funkcia HttpPostURL pri každom použití vytvorí nový THTTPSend objekt, ktorý nemá cookies nastavené.
// chrono: Ak budeš robiť podobnú funkciu ako je HttpPostUrl budeš musieť nastaviť cookies ešte pred Result := HTTP.HTTPMethod('POST', URL); Pred ten riadok pridat HTTP.Cookies := cookies; (cookies by mal byť TStringList)
skusil som to este vlozit pred ten result, no vypisalo mi to:
[Error] HTTPSend.pas(776): Cannot assign to a read-only property
//edit: dik moc, uz som to vyriesil, len som nastavil premennu na aj write, dokonca som daco podobne aj skusal a neviem preco som vtedy tiez nenastavil ten write...
...este raz, dik moc.
BTW, to cookie co sa vytvori, tak ono sa nikde na PC neuklada ako pri normalnom browsovani nie?
[Error] HTTPSend.pas(776): Cannot assign to a read-only property
//edit: dik moc, uz som to vyriesil, len som nastavil premennu na aj write, dokonca som daco podobne aj skusal a neviem preco som vtedy tiez nenastavil ten write...
...este raz, dik moc.
BTW, to cookie co sa vytvori, tak ono sa nikde na PC neuklada ako pri normalnom browsovani nie?
-
feromakovi
Expert
- Príspevky: 165
- Registrovaný: 24 okt 2008, 14:16
- Bydlisko: Bánovce nad Bebravou
aj ja
zdravím mám tiež problém s tou funkciou:
mám niečo takéto:
dotej premmennej typu datako som nevkladal nič neviem presne čo je to TStream a možno to bude súvisieť s tým
a vôbec neviem kde mám chybu so chcel len posielať tie url data do formulára php a nech ten s tými premennými pracuje...ale ani mi nevypíše chybu len ak kliknem na button tak počká a potom že exeption
a na tomto riadku v tej funkcií mi ukáže chybu alebo teda mi ju vyznačí:
a ešte jedna vec čo mi není jasná čo ste riešili s tými cookies lebo mi sme sa učili že to je v PC a sú tam zapísané stránky ktoré som navštívil prípadne heslá a tak...dalo by sa keby mi aj tie cookies niekto vysvetlil?? že k čomu to slúži keď niečo posielam do formulára a pod??
ďakujem
mám niečo takéto:
Kód: Vybrať všetko
uses httpsend,synacode;
datako:Tstream;Kód: Vybrať všetko
if httpPostURL('http://www.feromakovi.tym.sk/skuska/skola.php',EncodeURLElement('line=všeliaký text&user=Meno Užívateľa'),datako) then showmessage('dobre')
else showmessage('sračky');a na tomto riadku v tej funkcií mi ukáže chybu alebo teda mi ju vyznačí:
Kód: Vybrať všetko
Data.CopyFrom(HTTP.Document, 0);ďakujem
Predpokladám, že tomu vadí to, že si ten stream nevytvoril (ale posielaš tam len náhodný obsah, ktorý sa nachádza na tom mieste, kde je premenná).
Cookies sú spôsob, akým sa umožní serveru uložiť nejaké údaje v klientovi (teda často v prehliadači). Pri posielaní formuláru nemusí byť cookie potrebné (to záleží od toho, čo presne to má robiť).
Inak v tom streame potom bude odpoveď, ktorú poslal server.
Cookies sú spôsob, akým sa umožní serveru uložiť nejaké údaje v klientovi (teda často v prehliadači). Pri posielaní formuláru nemusí byť cookie potrebné (to záleží od toho, čo presne to má robiť).
Inak v tom streame potom bude odpoveď, ktorú poslal server.
-
feromakovi
Expert
- Príspevky: 165
- Registrovaný: 24 okt 2008, 14:16
- Bydlisko: Bánovce nad Bebravou
to
ahá ďakujem za vysvetlenie...ale mám ešte otázku že čo znamená vytvoriť stream...zatial som vždy len normálne programoval tak že som si premenné zadeklaroval a bolo...a teraz to treba aj nejako vytvárať??
BTW: ja od servera nepotrebujem žiadnu odpoveď hlavne nech tam pošle tie dve premenné formou post...inak spýtam sa aj takto že či nebude potom tomu php kódu vadiť že to posielam formou post a v zdrojáku php mám get...či to bude alebo nebude fungovať...
a posledná otázka, že v tom streame sa mi vráti akože čo zo stránky?? celý zdrojový kód?? alebo len nejaké nevyhnutné časti?
za odpovede ti vopred ďakujem
BTW: ja od servera nepotrebujem žiadnu odpoveď hlavne nech tam pošle tie dve premenné formou post...inak spýtam sa aj takto že či nebude potom tomu php kódu vadiť že to posielam formou post a v zdrojáku php mám get...či to bude alebo nebude fungovať...
a posledná otázka, že v tom streame sa mi vráti akože čo zo stránky?? celý zdrojový kód?? alebo len nejaké nevyhnutné časti?
za odpovede ti vopred ďakujem
Je úplne jedno, že ty nechceš žiadnu odpoveď. Tá knižnica je urobená tak, že do toho streamu tú odpoveď vloží (aj keď ju nechceš). Bude tam presne to, čo pošle server (ak pošle html kód, tak to bude html kód, ak pošle obrázok, tak tam bude obrázok...).
Objekt triedy TStream nevytvoríš (keďže tá trieda je abstraktná), ale môžeš vytvoriť napr. TMemoryStream (prípadne aj TStringStream).
S tým TMemoryStream by to vyzeralo približne takto:
Objekt triedy TStream nevytvoríš (keďže tá trieda je abstraktná), ale môžeš vytvoriť napr. TMemoryStream (prípadne aj TStringStream).
S tým TMemoryStream by to vyzeralo približne takto:
Kód: Vybrať všetko
stream :TMemoryStream;
stream := TMemoryStream.Create;
if httpPostURL('http://www.feromakovi.tym.sk/skuska/skola.php',EncodeURLElement('line=všeliaký text&user=Meno Užívateľa'), stream) then showmessage('dobre')
else showmessage('sračky');
stream.Free;-
feromakovi
Expert
- Príspevky: 165
- Registrovaný: 24 okt 2008, 14:16
- Bydlisko: Bánovce nad Bebravou
ok
uf diki moc...už mi aspoň dáva funkcia hodnotu true a nepadá mi program:D....no mám ešte zopár otázok..viem že už som otravný ale eď ma to zaujíma:
použil som to na takýto script:
potom som skúsil aj takýto:
normálne bez programu mi to funguje cez ten druhý s tým get...ale skúšal som obe a nič napísalo že dobre ale žiaden súbor mi to na ftp nevytvorilo...kde môže byť teraz problém??
a ešte otázočka..že ako bližšie sa pracuje s tým TMemoryStream...lebo do mema sa napr dá stream vypísať...ale tento MemoryStream keď dám že memo1.lines.loadfromstream(stream);
síce ma to pustí ale nič nevypíše...ja som čakal že mi to tam vypíše celý zdroják aj s odkazmi a pod...?? ako by som sa k tomu čo je v premennej stream mohol dostať??
použil som to na takýto script:
Kód: Vybrať všetko
<?php
$fp=FOpen($user,"a");
FWrite($fp,$line."\n");
FClose($fp);
?>Kód: Vybrať všetko
<?php
$fp=FOpen($_GET['user'],"a");
FWrite($fp,$_GET['line']."\n");
FClose($fp);
?>a ešte otázočka..že ako bližšie sa pracuje s tým TMemoryStream...lebo do mema sa napr dá stream vypísať...ale tento MemoryStream keď dám že memo1.lines.loadfromstream(stream);
síce ma to pustí ale nič nevypíše...ja som čakal že mi to tam vypíše celý zdroják aj s odkazmi a pod...?? ako by som sa k tomu čo je v premennej stream mohol dostať??
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
-
feromakovi
Expert
- Príspevky: 165
- Registrovaný: 24 okt 2008, 14:16
- Bydlisko: Bánovce nad Bebravou
aha
aha no ja som sa držal tohto:
je to z lekcií jak na php...tak som myslel že to bude to isté
a potom som si myslelže ten prvý kód bude akože tá metóda POST a ten druhý script to je metóda GET...
a mohol by som sa spýtať ako by to vyzeralo keby som použil metódu POST(akože ten script)...
alebo nedala by sa použiť nejaká iná funkcia zo synapse čo by to posielala ako GET??
//edit:
a keď vytvorím že:
stream:=TStringStream.create; tak mi napíše že mi chýba parameter string
tak som to upravil na stream:=TStringStream.create('string');
compilátor už je spokojný ale do mema sa mi to aj tak nevypíše.. tu je kde chyba??
Kód: Vybrať všetko
Jako metodu předání dat jsme určili GET, data teda budou předána jako součást URL. Při použití metody POST by však vše fungovalo stejně.a potom som si myslelže ten prvý kód bude akože tá metóda POST a ten druhý script to je metóda GET...
a mohol by som sa spýtať ako by to vyzeralo keby som použil metódu POST(akože ten script)...
alebo nedala by sa použiť nejaká iná funkcia zo synapse čo by to posielala ako GET??
//edit:
a keď vytvorím že:
stream:=TStringStream.create; tak mi napíše že mi chýba parameter string
tak som to upravil na stream:=TStringStream.create('string');
compilátor už je spokojný ale do mema sa mi to aj tak nevypíše.. tu je kde chyba??
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: aha
to čo sa píše v tých "lekciach php" by bola pravda keby si používal registrované superglobálne premenné, a teda taka ko si to mal najprv. To ti nešlo (vďaka bohu) a zmenil si to, ale potom to už nie je jedno. Keď tam dáš _GET tak ti to _POST brať nebude (a a naopak).
Máš teda dve možnosti:
1) zmeniť v php _GET za _POST (čo je lepšie riešenie, viď zase chronov príspevok o dlžke url ^)
2) poslať to ako get: nejak takto by to mohlo ísť. Ale možno tam je metoda aj na posielanie get, nechce sa mi teraz hladať
//edit: tak je to HttpGetText
Máš teda dve možnosti:
1) zmeniť v php _GET za _POST (čo je lepšie riešenie, viď zase chronov príspevok o dlžke url ^)
2) poslať to ako get:
Kód: Vybrať všetko
httpPostURL('http://www.feromakovi.tym.sk/skuska/skola.php?'+EncodeURLElement('line=všeliaký text&user=Meno Užívateľa'),'', stream) then showmessage('dobre')//edit: tak je to HttpGetText
Kód: Vybrať všetko
function HttpGetText(const URL: string; const Response: TStrings): Boolean;-
feromakovi
Expert
- Príspevky: 165
- Registrovaný: 24 okt 2008, 14:16
- Bydlisko: Bánovce nad Bebravou
ok
ok pohoda veď keď je tá POST metóda lepšie riešenie ja si rád nechám poradiť...
ale rád by som sa spýtal na tú premennú TStringStream
a do toho mema mi aj tak nič nevypíše čím to je??
ale rád by som sa spýtal na tú premennú TStringStream
Kód: Vybrať všetko
var stream:TstringStream;
.
.
.
stream:=TStringStream.Create('string');//ten string tam odomňa pýtalo tak som napísal prvé čo mi napadlo
if httpPostURL('http://www.feromakovi.tym.sk/a/prog.php','line=text1&user=aaa.txt', stream) then showmessage('dobre')
else showmessage('sračky');
memo1.Lines.LoadFromStream(stream);
stream.Free;Tiez som sa s tym niekedy "mordoval"
a nakoniec mi to fungovalo takto
Kód: Vybrať všetko
var stream:TStringStream;
begin
stream:=TStringStream.Create('');
if httpPostURL('http://www.feromakovi.tym.sk/a/prog.php','line=text1&user=aaa.txt', stream) then showmessage('dobre')
else showmessage('sračky');
stream.Seek(0, soFromBeginning);
memo1.Lines.text:= stream.readString(stream.Size);
stream.Free;