TIDHTTP Erhalten Sie eine Prozedur, die nicht bei einigen URLs funktioniert

StackOverflow https://stackoverflow.com/questions/2429958

  •  19-09-2019
  •  | 
  •  

Frage

Ich stoße auf ein Problem in der Delphi Tidhttp -Komponente, bei der das GET -Verfahren eine bestimmte URL nicht abrufen kann, aber auf anderen URLs funktioniert es. Beispiel: Dieser Code gibt eine leere Antwort zurück. Datastring. Response.datastring ist nur mit diesem error_url leer, aber mit anderen URLs Die Antwort.Datastring hat einen Wert. Ich muss den Inhalt dieser Fehler_url abrufen, um dieses Problem zu beheben.

procedure TForm1.Button1Click(Sender: TObject);
var
  Response : TStringStream;
  error_url: string;
begin
  error_url := 'http://www.chefscatalog.com/international/home.aspx'; //error url
  Response := TStringStream.Create;
  try
    IdHTTP1.Get(error_url, Response);
    Memo1.Text := Response.DataString;
  finally
    FreeAndNil(Response);
  end;
end;

Übrigens ist die Umleitung von Idhttp1 hier auf wahr eingestellt, sodass die Umleitung nicht das Problem ist.

Dies ist die Ausnahme, auf die ich gestoßen bin: 1. HTTP/1.1 302 Found 2. EdeCompressionError mit Meldung 'ZLIB-Fehler (-3)' ''

Sie können den Quellcode (der IndyTest.zip) dieses Projekts in diesem Link herunterladen http://www.yourfilelink.com/get.php?fid=534933

Bitte helfen Sie mir, Leute. Danke im Voraus :)

War es hilfreich?

Lösung

Der Grund ist die Website, die Sie schlagen möchten, ist, nach einem Cookie zu suchen. Wenn sie nicht eingestellt wird, versucht sie, es zu setzen, und dann eine 302 -Umleitung zurück zu sich selbst.

Da Sie einen Cookie -Manager nicht angeschlossen haben, landen Sie in einer 302 -Umleitungsschleife, während die Site immer wieder nach Cookie sucht, einstellt und dann umleitet.

Behandeln Sie Cookies und es funktioniert gut mit nur einer einzigen 302.


Es scheint jedoch, dass Indy aus irgendeinem Grund die Cookies ignoriert, die von dieser Seite gesendet werden. Ich habe einen Testcode ausgepeitscht, wenn ich geklmte http://www.google.com Ich bekomme

New cookie: PREF
New cookie: NID
Redirecting (1) to: http://www.google.co.nz/
New cookie: PREF
New cookie: NID

Dies sind die Header, die Google senden

Set-Cookie: PREF=ID=3c7e441914b902ae:TM=1268686477:LM=1268686477:S=Z-Gwqx52jK0V1rYR; expires=Wed, 14-Mar-2012 20:54:37 GMT; path=/; domain=.google.com
Set-Cookie: NID=32=vsOZvkr4AOZ7320d_OBPf2zR2jau4E6pupbOe_ZaaX4DNjahTzSV-mSA55naTk-5cXQcn7SNEp7uSxbE_cFrL9ZftGApTGZMPGKzcz3_NZE_2MYpWG5PGbwWFw9t2d_R; expires=Tue, 14-Sep-2010 20:54:37 GMT; path=/; domain=.google.com; HttpOnly

Für diese andere Website bekomme ich dies jedoch in meiner Debug -Ausgabe

Redirecting (1) to: http://www.chefscatalog.com/error.aspx?impsid=0
Redirecting (2) to: http://www.chefscatalog.com/error.aspx?impsid=0

bis zu 15 Versuche. Wenn wir uns ansehen, welche Header die Website zurücksendet

Set-Cookie: ASP.NET_SessionId=4o0bpi45evee0d45qos1uy55; path=/; HttpOnly
Set-Cookie: ChefsSite=CartID=00000000-0000-0000-0000-000000000000&cst=f4t8YpBpAAkNiRUd9BEf2luKAA%3d%3d&act=c0f2VBCSbv30F4kasnvWS5OfJQ%3d%3d&CookiesEnabled=False; expires=Wed, 14-Apr-2010 20:54:22 GMT; path=/

Ich stelle dort fest, dass der Site die Domäne am Ende des Set-Cookie fehlt, was seltsam ist, aber ich denke nicht, dass es ein Muss vom RFC ist. Wenn wir uns die addcookie/2-Methoden von idcookieManager ansehen, die ein Host auf diesem Param ansieht, funktioniert es vielleicht nicht auf Set-Cookies, die die Domain nicht angeben.

Ich habe dies auf ein paar weiteren Websites getestet und alle funktionieren gut, wenn der Set-Cookie domain = .google.com enthält.

Es ist auch interessant festzustellen

idhttp.Response.rawHeHeHeers.text

Für die Website, die nicht funktioniert, sehen Sie die Set-Cookies nicht, sondern auf den Websites, die funktionieren, die Set-Cookies ...

Wenn ich jedoch IDHTTP -Benutzeragent auf festgelegt habe

    Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.1) Gecko/20100122 firefox/3.6.1

(von einer anderen Antwort)

Dann scheint es die Kekse gut abzuholen

    New cookie: ASP.NET_SessionId
    New cookie: ChefsSite
    Redirecting (1) to: http://www.chefscatalog.com/international/home.aspx
    New cookie: ChefsSite

Seltsam.

Andere Tipps

Überprüfen Sie das OnRedirect -Ereignis. Aus irgendeinem Grund werden Sie zu einer Fehlerseite umgeleitet.

http://www.chefscatalog.com/error.aspx?impsid=0

Was wiederum Sie wieder auf dieselbe Fehlerseite umgeleitet wird, bis Sie Ihr UmbauMaximum (15) erschöpfen.

Aktualisieren:

Sobald Sie auf die Fehlerseite umgeleitet wurden, erklärt Wizzard unten, warum es immer wieder auf dieselbe Fehlerseite zurückleitet. Kekse.

Der Grund, warum Sie überhaupt umgeleitet werden, ist wahrscheinlich, dass die Website Ihre nicht erkennt (oder mag) Benutzeragentenzeichenfolge (in Anfragemobile). Standardmäßig ist es "Mozilla/3.0 (kompatibel; Indy Library)". Ändern Sie es in eine aktuelle Zeichenfolge, die von verwendet wird Feuerfuchs, Dh oder ein anderer anerkannter Browser.

Ich habe es mit "Mozilla/5.0 (x11; u; linux i686; en-us;

Weitere Details finden Sie in der Indy KB PDF.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top