AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Frage zur Nutzung von ixmlhttprequest
Thema durchsuchen
Ansicht
Themen-Optionen

Frage zur Nutzung von ixmlhttprequest

Ein Thema von Tanc · begonnen am 7. Nov 2008 · letzter Beitrag vom 10. Nov 2008
Antwort Antwort
Tanc

Registriert seit: 25. Feb 2008
7 Beiträge
 
#1

Frage zur Nutzung von ixmlhttprequest

  Alt 7. Nov 2008, 18:40
Hallo

ich habe schon die Suche verwendet, aber nichts passendes gefunden.
Ich habe aus dem Thread hier eine Funktion aufgebaut um mit (!) Passwort und Username auf eine WEbstie zuzugreifen,
mit Indy hat das irgendwie nicht funktioniert (zugriff auf eine htaccess geschützte Seite).

Delphi-Quellcode:
function downloadData(URL,login,pw :String):String;
var
doc:IXMLHTTPRequest;
begin
doc:= coXMLHTTP.Create;
doc.open('GET',URL,false,login,pw);
doc.send(EmptyParam);

result := doc.responseText;
end;
Das Funktioniert auch an und für sich wunderbar.
Jedoch lässt sich die Funktion kein zweites mal nutzen, weil aus irgendeinem Grund keine neu Verbindung aufgebaut wird. D.h. ich muss immer erst das Programm neustarten damit
neue Daten heruntergeladen werden können.
Nun hab ich vermutet das in der Funktion ein doc.free fehlt, aber nach dem Tutorial soll die Freigabe ja automatisch funktionieren.
Wie kann ich es nun machen das ich beliebig oft die Funktion ohne das Programm neu zu starten verwenden kann.
Gibt es irgendeine Lösung für mein Problem ? Oder hab ich nur einen Fehler gemacht ?

mfg Tanc
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.415 Beiträge
 
Delphi XE5 Professional
 
#2

Re: Frage zur Nutzung von ixmlhttprequest

  Alt 7. Nov 2008, 23:28
Wenn du nil zuweist sollte das ComObjekt freigegeben werden.
doc:=nil;
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
NineBerry

Registriert seit: 7. Nov 2008
Ort: Karlsruhe
8 Beiträge
 
#3

Re: Frage zur Nutzung von ixmlhttprequest

  Alt 8. Nov 2008, 00:41
Hallo

Bekommst du eine Fehlermeldung? Was steht denn in doc.responseText? Einfach leer? Was steht denn in den anderen Eigenschaften von doc?

Passiert das auch, wenn du einfach den Text einer Standardseite wie http://www.heise.de abrufst oder nur bei deiner speziellen Adresse?

Neun
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Frage zur Nutzung von ixmlhttprequest

  Alt 8. Nov 2008, 01:43
Du müsstest auch den Status (siehe http://msdn.microsoft.com/en-us/libr...25(VS.85).aspx) auswerten.
Der Status sollte 200 (=OK) sein.
Zum HTTP-Status siehe auch http://de.wikipedia.org/wiki/HTTP-Statuscode

Man braucht das Objekt nicht für jede HTTP-Anfrage zu zerstören und ein Neues zu erzeugen.
  Mit Zitat antworten Zitat
Tanc

Registriert seit: 25. Feb 2008
7 Beiträge
 
#5

Re: Frage zur Nutzung von ixmlhttprequest

  Alt 8. Nov 2008, 16:30
Also, doc := nil hatte ich schon versucht :/ hat nichts geändert.

Der Http Status Code ist immer 200, wenn ich die Funktion nochmal aufrufe, steht im ResponseText immernoch das selbe wie beim ersten Aufruf.

Das Problem hab ich erst gemerkt, als ich festgestellt hatte das die Internetseite die ich damit laden will sich verändert hat, aber die Daten die ich durch die Funktion bekomme immer die selben geblieben sind. Dann hab ich mit Wireshark geschaut ob überhaupt eine Verbindung aufgebaut wird. Beim ersten Aufruf nach Programmstart wird perfekt eine Verbindung über Port 80 aufgebaut. Statuscode ist immer 200, und ich empfange die Daten. Bei jedem weiteren Aufruf wird aber keine Verbindung mehr aufgebaut. Es wird das was im responseText und in den Statustext steht einfach erneut ausgegeben. Das selbe gilt für andere Websites. Die Daten werden beim ersten Aufruf geladen, später wird keine erneute Verbindung aufgebaut. (laut Wireshark) Wenn ich nun meinetwegen als 1. Adresse heise nehme, und aufrufe, dann läd er erstmal den Quellcode runter. Wenn ich nun die Adresse meinetwegen zu google.de ändere, läd er von google den QC in den responseText. WEnn ich jetzt wieder die URL von heise nehme, läd er den Quellcode von heise.de auch in den ResponseText, es wird aber trotzdem keine erneute Verbindung zum Server aufgebaut.

Fehlermeldungen erhalte ich keine.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Frage zur Nutzung von ixmlhttprequest

  Alt 8. Nov 2008, 18:43
Hier wird der Cache des Internet Explorers wirksam.
Man kann den Cache austricksen, indem man die URL jedesmal ändert:
Delphi-Quellcode:
// aus [url]http://www.test.de/info.html[/url] wird dann
// [url]http://www.test.de/info.html?random_param=3623[/url]
// falls die URL schon Parameter haben sollte, wird der parameter mit & angehängt
// ungetestet, sollte aber funktionieren
function RandomizedURl(const URL:string):string;
   function RPart:string;
   begin
     Result := 'random_param='+IntToStr(random(32768));
   end;
begin
  if Pos('?', URL) <> 0 then
    Result := URL + '&'+RPart
  else
    Result := URL + '?'+RPart;
end;
Nachtrag: Bugfix - beim Result hat noch die eigentliche URL gefehlt
  Mit Zitat antworten Zitat
Tanc

Registriert seit: 25. Feb 2008
7 Beiträge
 
#7

Re: Frage zur Nutzung von ixmlhttprequest

  Alt 8. Nov 2008, 19:45
Danke für den Trick, beim Result hat noch die eigentliche URL gefehlt, aber ansonsten geht die Funktion

Schade das der Cache es da unmöglich macht eine aktualisierte Fassung der Seite zu laden.

Damit ist aber mein Problem auch gelöst

Edit: Wobei mich natürlich trotzdem interessieren würde ob es eine andere Möglichkeit gibt den Cache zu umgehen/auszuschalten, nur der Vollständigkeit halber.
  Mit Zitat antworten Zitat
NineBerry

Registriert seit: 7. Nov 2008
Ort: Karlsruhe
8 Beiträge
 
#8

Re: Frage zur Nutzung von ixmlhttprequest

  Alt 8. Nov 2008, 20:41
Wenn der Server-Teil auch von dir stammt, kannst du dort HTTP-Header senden, die den Browser veranlassen, die Seite nie zwischenzuspeichern.
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.415 Beiträge
 
Delphi XE5 Professional
 
#9

Re: Frage zur Nutzung von ixmlhttprequest

  Alt 10. Nov 2008, 09:53
den Cache kannst du umgehen in dem du an die Url immer einen neuen Parameter anhängst.

Code:
http://www.tolledomain.de/index.php?irgwendes=<hier eine Zahl und die bei jedem Request hochzählen>
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz