TIDHTTP Erhalten Sie eine Prozedur, die nicht bei einigen URLs funktioniert
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 :)
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.