AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Eine Webseite laden mit Indy
Thema durchsuchen
Ansicht
Themen-Optionen

Eine Webseite laden mit Indy

Ein Thema von BenNation · begonnen am 17. Jan 2010 · letzter Beitrag vom 19. Jan 2010
Antwort Antwort
Seite 1 von 2  1 2      
BenNation

Registriert seit: 17. Jan 2010
13 Beiträge
 
#1

Eine Webseite laden mit Indy

  Alt 17. Jan 2010, 13:52
Sorry, bin eher noch Delphi-Anfänger...

Ich möchte einfach nur eine Webseite laden und habe folgenden Code:

Delphi-Quellcode:
function TSDIAppForm.ReadSite(URI: string): string;
var
  idClient: TIdHTTP;
  msData: TMemoryStream;
  ResultString: String;
begin
  begin
    idClient := TIdHTTP.Create(Application);
    msData := TMemoryStream.Create;
    try
      idClient.Get(URI, msData);
      msData.Seek(0, soFromBeginning);
      ResultString := StreamToString(msData);
    except
      //nix
   end;
   idClient.Free;
   msData.Free;
  result := ResultString;
  end;
end;
Das Problem ist, dass es bei manchen Seiten funktioniert und mir den Quelltext schön zurückgibt.
Nur bei Seiten wie Google.de oder ähnlichen wirft mir Delphi eine Exception mit der Klasse ERangeError mit der Meldung "Range check error" aus und bleibt in der Zeile

msData.Seek(0, soFromBeginning); hängen. Was kann ich tun, um das zu verhindern? Im Web habe ich nichts dazu gefunden...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

Re: Eine Webseite laden mit Indy

  Alt 17. Jan 2010, 13:58
Zitat:
wirft mir Delphi eine Exception ...
Bei welchem Befehl?

Meine hätte da noch 'nen Verdacht:
Wie sieht denn dein StreamToString aus?

Delphi-Quellcode:
except
  //nix
end;
Wieso nix?
$2B or not $2B
  Mit Zitat antworten Zitat
BenNation

Registriert seit: 17. Jan 2010
13 Beiträge
 
#3

Re: Eine Webseite laden mit Indy

  Alt 17. Jan 2010, 14:03
Ich wollte, dass er die Exception ignoriert. Funktioniert auch, wenn ich die .exe von Hand starte.

StreamToString ist folgende:

Delphi-Quellcode:
Function TSDIAppForm.StreamToString(AStream: TStream): String;
Begin
  SetLength(Result, AStream.Size);
  AStream.Position := 0;
  AStream.ReadBuffer(Result[1], AStream.Size);
End;
Scheint zu funktionieren...
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Eine Webseite laden mit Indy

  Alt 17. Jan 2010, 14:15
Hi,

es gibt auch neine Überladung von TIdHTTP.Get, welche dir den String direkt zurückliefert.

Und verwende mal try-finally.

Gruß
FAlter
Felix Alter
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

Re: Eine Webseite laden mit Indy

  Alt 17. Jan 2010, 14:25
Zitat von BenNation:
Delphi-Quellcode:
Function TSDIAppForm.StreamToString(AStream: TStream): String;
Begin
  SetLength(Result, AStream.Size);
  AStream.Position := 0;
  AStream.ReadBuffer(Result[1], AStream.Size);
End;
Und in welcher Delphi-Version?
Ab D2009 wird es Probleme geben (das nette Unicode halt).

Zitat:
Ich wollte, dass er die Exception ignoriert. Funktioniert auch, wenn ich die .exe von Hand starte.
Ja toll, dann tritt dort auch die Exception auf und weil man es nicht mitbekommt, weiß man nicht, warum irgendwas nicht geht.
$2B or not $2B
  Mit Zitat antworten Zitat
BenNation

Registriert seit: 17. Jan 2010
13 Beiträge
 
#6

Re: Eine Webseite laden mit Indy

  Alt 17. Jan 2010, 14:43
Ich verwende Delphi 2007.

Die Überladung scheint's bei mir nicht zu geben. Ich kann nur die mit dem Stream finden...

Das mit dem finally hatte ich schon, so habe ich neulich die Funktion übernommen. Macht aber leider keinen Unterschied.

Kann ich denn nichts mehr tun?
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Eine Webseite laden mit Indy

  Alt 17. Jan 2010, 14:56
.. kann es sein, dass Du bei redirected Seiten
kein Ergebnis bekommst?

Wenn das der Fall sein sollte, idHttp1.HandleRedirects := true; Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

Re: Eine Webseite laden mit Indy

  Alt 17. Jan 2010, 14:58
Zitat von BenNation:
Kann ich denn nichts mehr tun?
Ja kannst du, einfach nur den Grund für die Exception beheben.
$2B or not $2B
  Mit Zitat antworten Zitat
BenNation

Registriert seit: 17. Jan 2010
13 Beiträge
 
#9

Re: Eine Webseite laden mit Indy

  Alt 17. Jan 2010, 17:49
Das klingt doch etwas ungenau für einen Anfänger. Kannst du das etwas ausführen?

Ganz nebenbei: Wie kann ich einen String auf eine bestimmte Länge "padden". Also wenn ich jetzt eine bestimmte Anzahl von Leerzeichen kreiiren wollte, wie heisst da die funktion?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#10

Re: Eine Webseite laden mit Indy

  Alt 17. Jan 2010, 18:17
Zitat von BenNation:
Das klingt doch etwas ungenau für einen Anfänger. Kannst du das etwas ausführen?
Nein, da du die Fragen nicht beantwortet hast.

Ganz nebenbei: eine Frage pro Thread
("auf bestimmte Länge" = Delphi-Referenz durchsuchenSetLength, wobei Delphi-Referenz durchsuchenStringOfChar auch nett ist)
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 20:42 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