Delphi a kontrola web linku

Programovacie jazyky, rady, poradňa...
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

V Memo to určite nebude rýchlejšia ako keď to budeš hľadať v tom streame st (čo si dal ako parameter funkcii HttpPostURL). Musí sa to totiž do toho Memo minimálne skopírovať. :)
To, či ti príde aj hlavička musíš vidieť. Je na začiatku toho čo ti príde

Kód: Vybrať všetko

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
alebo

Kód: Vybrať všetko

POST https://ssl.rapidshare.com/cgi-bin/premiumzone.cgi --> 200 OK
Cache-Control: no-cache
Connection: close
Date: Sat, 27 Jan 2007 22:48:17 GMT
V tom druhom prípade ti ten komponent posiela aj http hlavičku a v nej môže byť (po úspešnom prihlásení) aj to cookie (hľadaj "Set-Cookie:").
4JOKE
Light Star
Light Star
Príspevky: 269
Registrovaný: 10 sep 2005, 10:23

Príspevok od používateľa 4JOKE »

poslalo to tu prvu moznost:

Kód: Vybrať všetko

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Možno by sa dala funkcia HttpPostURL mierne upraviť, aby si dostal naspeť aj Headers a Cookies. Alebo ak sa dá niektorý parameter (Data, Headers, Cookies) ako nil, tak sa tie dáta nevrátia (napr. keď z odpovede chceš len cookies). Upraviť by sa to mohlo napr. takto:

Kód: Vybrať všetko

function HttpPostURL2(const URL, URLData: string; const Data: TStream; const Headers: TStringList; const Cookies: TStringList): 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
    begin
      Data.CopyFrom(HTTP.Document, 0);
      Headers.Assign(HTTP.Headers);
      Cookies.Assign(HTTP.Cookies);
    end;
  finally
    HTTP.Free;
  end;
end;
len neviem, ako sa správne presúva TStringList (Delphi som naposledy používal veľmi dávno a nemám ani dokumentáciu). Tá úprava, aby sa kontrolovalo ktoré dáta chceme, je jednoduchá.

Kód: Vybrať všetko

if Assigned(Headers) then Headers.Assign(HTTP.Headers);
4JOKE
Light Star
Light Star
Príspevky: 269
Registrovaný: 10 sep 2005, 10:23

Príspevok od používateľa 4JOKE »

skusim zajtra a dam vediet
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

4JOKE napísal:a ak porovnam teraz vypisovanie zdrojaku tymto komponentom s tym ze by som to prerobil len ze by to vracalo ten header, tak oplati sa mi s tym zabijat cas a hladat sposob ako to spravit len cez header ale ta rychlost nebude zasadne vyssia??
no hej, ušetríš čas sťahovania pár kíl navyše :wink: ale pri rýchlostiach dnešných pripojení to nepocítiš. Tak ako chceš. Závisí od stránky ktoré overuješ a tiež od programu (koľkokrát chceš danú procedúru volať)

OT:
2 chrono: nemáš nejaký zaujímavý link ako presne má vyzerať hlavička POST-u (neviem ako tam zakomponovať referera)
4JOKE
Light Star
Light Star
Príspevky: 269
Registrovaný: 10 sep 2005, 10:23

Príspevok od používateľa 4JOKE »

Mno co sa tyka vyhladavanie v streame, tak nic pre mna :D
To radsej budem ukladat do Mema nez by som sa mal hrajkat s tym Algoritmom...
http://groups.google.sk/group/borland.p ... 3a3d213901

2Chrono: podarilo sa mi s to upravit podla toho tvojho... inac ked sa tak nato pozeram teraz ked mi to posle hlavicku a cookies, tak by som mohol toto vymazat nie? ,, Data.CopyFrom(HTTP.Document, 0); ,, bo ak som pochopil tak to je ten cely zdrojak co mi to posielalo.... a urychly sa to tym tvojim sposobom, lebo mi to pripada ze ta funkcia mi nacita cely tu stranku a vyberie len cookies a header takze casovo asi to iste...
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

audiotrack: rfc26116 a Referer čiže by POST žiadosť mohla vyzerať nejako takto:

Kód: Vybrať všetko

POST http://www.abclinuxu.com
Referer: http://www.mozilla.sk
User-Agent: lwp-request/2.06
Content-Length: 13
Content-Type: application/x-www-form-urlencoded

test=retazec
Ak myslíš ako to pridať do toho synapse, tak si pozri funkciu

Kód: Vybrať všetko

function THTTPSend.HTTPMethod(const Method, URL: string): Boolean;
a v nej riadok

Kód: Vybrať všetko

FHeaders.Insert(0, 'Cookie: ' + s);
(vlastene hociktorý, v ktorom je FHeaders.Insert).
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Namiesto TMemo sa dá použiť TStrings (TStringList) (veď Memo.Lines je tuším práve TStringList). :)
4JOKE
Light Star
Light Star
Príspevky: 269
Registrovaný: 10 sep 2005, 10:23

Príspevok od používateľa 4JOKE »

chrono napísal:Namiesto TMemo sa dá použiť TStrings (TStringList) (veď Memo.Lines je tuším práve TStringList). :)
jj, to som si uz upravil ze ta HttpPostUrl mi vyhodi len st:TstringList ktora obsahuje cookies a ked je prazdna tak sa nepodarilo prihlasit...

...no tu funkciu co si prerobil tu HttPostUrl2 ,tak ona robi vlastne to iste co ta predosla (teda nacita ten zdrojovy kod a posle mi ho) + este nacita a posle header a cookies...
...teda v rychlosti sa asi moc nezmenilo...tak ak som ta teraz spravne pochopil, tak musim pozriet HttpMethod a tam to zmenit aby to nacitavalo len cookies... chapem spravne?
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Myslel som to tak, že napr. chceš len hlavičku, tak zavoláš HttpPostURL2(url, urldata, nil, headers, nil); Ak chceš všetko, tak HttpPostURL2(url, urldata, document, headers, cookies); Ale to by sa muselo upraviť tak, že by sa kontrolovalo, či je parameter nil (Data/Headers/Cookies) a ak nie je, tak sa tieto dáta pošlú.
Na to, aby sa prijala len hlavička + cookies, by bolo treba upraviť knižnicu synapse (konkrétne súbor httpsend.pas funkcia HTTPMethod [hľadaj v nej text "if need receive response body, read it"]). Lepšie by bolo naprogramovať vlastnú s menšími úpravami.
ferks
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 105
Registrovaný: 03 okt 2005, 18:40
Bydlisko: Poprad
Kontaktovať používateľa:

Príspevok od používateľa ferks »

audiotrack napísal:2 chrono: nemáš nejaký zaujímavý link ako presne má vyzerať hlavička POST-u (neviem ako tam zakomponovať referera)[/size]
na plnohodnotne POSTovanie som pouzival Indy komponent IdHttp ale teraz uz pracujem iba s kvalitkou a to s ICS komponentami (su zadarmo a velmi kvalitne), konkretne HttpCli, len este nemam zistine ci dokaze pracovat s SSL (zatial som to nepotreboval)
4JOKE
Light Star
Light Star
Príspevky: 269
Registrovaný: 10 sep 2005, 10:23

Príspevok od používateľa 4JOKE »

ferks napísal:na plnohodnotne POSTovanie som pouzival Indy komponent IdHttp ale teraz uz pracujem iba s kvalitkou a to s ICS komponentami (su zadarmo a velmi kvalitne), konkretne HttpCli, len este nemam zistine ci dokaze pracovat s SSL (zatial som to nepotreboval)
indy komponenty sa mi zdali komplikovanejsie ako synapse, bo ku synapse som mal aj dema a na stranke bolo celkom dobre popisane co co robi...
ferks
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 105
Registrovaný: 03 okt 2005, 18:40
Bydlisko: Poprad
Kontaktovať používateľa:

Príspevok od používateľa ferks »

4JOKE napísal:indy komponenty sa mi zdali komplikovanejsie ako synapse, bo ku synapse som mal aj dema a na stranke bolo celkom dobre popisane co co robi...
ICS su dokonca este komplikovanejsie :-)
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

ferks napísal:na plnohodnotne POSTovanie som pouzival Indy komponent IdHttp ale teraz uz pracujem iba s kvalitkou a to s ICS komponentami (su zadarmo a velmi kvalitne), konkretne HttpCli, len este nemam zistine ci dokaze pracovat s SSL (zatial som to nepotreboval)
to mňa nezaujíma čo ty používaš na postovanie, ja to potrebujem aj naťahovať do webbrowseru a zobrazovať.
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

audiotrack napísal:to mňa nezaujíma čo ty používaš na postovanie, ja to potrebujem aj naťahovať do webbrowseru a zobrazovať.
Môžem vedieť, na čo potrebuješ to POST?
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

chrono napísal:Môžem vedieť, na čo potrebuješ to POST?
šak som ti písal že na odoslanie referera. Ono ten webbrowser funguje tak, že keď mu dáš načítať stránku, tak starý obsah zruší a natiahne nový. Aby som docielil prechod z jednej lokality na druhú v rámci webbrowsera, musím okrem url zabezpečiť aj záznam o predchádzajúcej stránke v podobe referera. Ono by som nemusel, keby to daný web nevyžaduje :)
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Moja otázka mala znieť: Načo potrebuješ ten POST + Referer?
Na akej stránke to potrebuješ (stále ten rapidshare, alebo niečo iné)? Chcel som vedieť, na akej stránke to potrebuješ a čo chceš dosiahnuť. :)
Či nie je aj nejaký iný spôsob. :wink:
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

nie rapid to nie je, je to môj súkromný projekt s ktorým sa bavkám keď mám trochu času. A ver mi: som dosť skúsený aby som sa vedel rozhodnúť čo a ako spravím. Takto mi to vyhovuje a myslím že iným spôsobom by som možno rýchlejšie spravil jednú vec, no neskôr by som tak či tak musel ten webbrowser vytiahnúť :wink:
a aký web? To ťa nemusí trápiť :)
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

OK
Ja len, či keď potrebuješ webbrowser, nie je lepšie použiť Firefox + Greasemonkey (tam sa dá nastaviť či sa použije POST/GET, dá sa nastaviť Referer...) .
Ale máš pravdu, netrápi ma to. :wink:

//audiotrack: na také účely používam RefControl vo Firefoxe.. Ale toto má byť univerzálna aplikácia a nie aby si používateľ otváral prehliadač a inštaloval nejaké addony. Koniec diskusie, my tu pomáhame niekomu inému a nie mne :wink:

// chrono: nemohol by tu niekto upraviť ten link na Google, v mojom prehliadači (Konqueror/Firefox) mám kôli nemu príliš širokú stránku a zle sa to číta (no vlastne som lenivý rolovať okno)
4JOKE
Light Star
Light Star
Príspevky: 269
Registrovaný: 10 sep 2005, 10:23

Príspevok od používateľa 4JOKE »

...no ja som to uz dokoncil aj ked niekde tam mam bug, ale to uz nejak aj sam doriesim :wink:
...a este sa budem muset pohrat s tym ze to nenacita celu stranku ale len cookie ale to az ked bude viac casu...

..este raz thnx :aasmile1:
Napísať odpoveď