Entwickler-Ecke

Internet / Netzwerk - http.get abbrechen ohne disconnect?


huhn - Fr 14.10.05 15:02
Titel: http.get abbrechen ohne disconnect?
Hi leute!
ich benutze die indy-compo und möchte den download ohne disconnect abbrechen.
Dh ich hab eine schleife in der mehrmals http.get ausgeführt wird ich aber nur 1-9 bytes brauche. Jedoch unterstützt der server nicht die funktion http.request.contentlength etc weswegen ich das nicht benützen kann.
habt ihr noch eine idee wie ich des noch abbrechen kann? ich benütze zudem noch einen cookiemanager.
ich hoffe ihr könnt mir helfen :flehan:
mfg huhn


huhn - Fr 14.10.05 15:30

Ich habe eine methode gefunden, die mir gar nicht gefällt!

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
for id:=0 to 20 do
  begin
    try
      http.ReadTimeout:=100;
      HTTP.get('blubb'+id);
      http.ReadTimeout:=0;
    except
    end;
  end;

gibts vielleicht no was anderes?


huhn - Sa 15.10.05 15:18

Ich hab noch weiter rumprobiert und rumgesurft aber nichts mehr weiteres gefunde.
ich habe es auch mal probiert in dem onWork ereignis den readtimeout:=2 zu setzen und damit nach den ersten empfangenen daten abzubrechen, dies hat aber nicht funktioniert, bzw war genauso langsam wie vorher. Bei ftp gibt es einen aufruf namens cancel, könnte man sowas nicht auch für http machen oder weiß einer wie er aufgebaut ist?
Gibt es vielleciht eine Möglichkeit nur was zu senden ohne etwas zu empfangen?
mfg huhn


retnyg - Sa 15.10.05 15:36

glaube nicht dass du mit der unflexiblen indy geschichte da erfolg haben wirst.
beim api-befehl RECV kannst du angeben, wieviel bytes von deinem Socket gelesen werden.
allerdings musst du dich selbst um verbindungsaufbau, http protokoll etc. kümmern.


huhn - Sa 15.10.05 17:06

das mit dem recv buffer hab ich au schon probiert und dann beim ersten onwork readtimeout,
dies war aber nicht ganz so erfolgreich.
wie meinst "allerdings musst du dich selbst um verbindungsaufbau, http protokoll etc. kümmern." das?
mfg huhn


retnyg - Sa 15.10.05 17:25

ich meine damit dass du nicht einfach nur GET schreibst und alles von alleine passiert,
sondern dass du ne verbindung zu port 80 aufbaust, dann den HTTP request selber zusammenbaust und hinschickst, usw...
democode: Suche in: Delphi-Forum, Delphi-Library MP3PROXY


huhn - Sa 15.10.05 17:30

achso jetzt also ne TCP-Verbindung aufbauen html-header schicke.....
des hab ich mir auch überlegt, aber es wäre ein ziemlich großer aufwand den kompletten quelltext bei mir zu überarbeiten.
gibt es vielleicht noch andere gut kompos auser indy bzg http?
mfg huhn


retnyg - Sa 15.10.05 17:37

ich persönlich finde meine retHTTPGet unit ziemlich gut ;-)
(weil die auf den ganzen VCL schnickschnack scheisst, unit einbinden und gut)
siehe romhustler auf meiner hp


huhn - Sa 15.10.05 17:54

sieht gut aus :)
aber so wie ich das sehe ist nicht irgendwie ne funktion für cookies drinne oder ;-)
BinaryData: Boolean; wofür is des nomal?
PostQuery: String; ist das hier für die Post-variablen?


retnyg - Sa 15.10.05 17:57

user profile iconhuhn hat folgendes geschrieben:
aber so wie ich das sehe ist nicht irgendwie ne funktion für cookies drinne oder ;-)

ne, hab ich bislang nicht gebraucht =)
user profile iconhuhn hat folgendes geschrieben:
BinaryData: Boolean; wofür is des nomal?

wenn du httpgetfile machst solltest du das auf true setzen, wenn du nur html willst (httpgetstring) setzte das auf false, die antwort ist dann in stringresult, ansonsten in dem filename den du angibst
user profile iconhuhn hat folgendes geschrieben:
PostQuery: String; ist das hier für die Post-variablen?

jo, allerdings nicht für file uploads


huhn - Sa 15.10.05 18:10

tja is wirklich gut aber ohne cookies und en paar andere sachen schlecht zum integrieren, werds aber mal in meine sammlung tun, dann hab ich was beim nächsten mal^^
Ich werde wennschon jetzt die head methode von indy verwenden oder mir nochmal genauer den code von TCP/http von indy angucken und vielleicht was ergänzen^^