Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Bei IdHTTP bekomme ich einen 500 Error bei POST request (https://www.delphipraxis.net/147758-bei-idhttp-bekomme-ich-einen-500-error-bei-post-request.html)

gORDon_vdLg 15. Feb 2010 22:25


Bei IdHTTP bekomme ich einen 500 Error bei POST request
 
Es ist eventuell eher ein Problem des HTTP Protokoll, aber fragen kostet ja nichts.
Ich bastle im Moment einen Video Downloader für verschiedene Hoster wie z.B. YouTube usw. Ich verwende dazu IdHTTP, also die Indys. Die Seite SEITE-XY (vorsicht, teils heftige Videos!) hat bei manchen Videos eine Abfrage wo der User gefragt wird ob er schon 18 ist. Wenn man es im Firefox bestätigt wird folgender Post request gesendet:

Code:
POST /age-verification.asp HTTP/1.1
Host: [url]www.xy.com[/url]
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.2) Gecko/20100115 Firefox/3.6
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: [url]http://www.xy.com/age-verification.asp?goingtoURL=get.asp?i=V5088[/url]
Cookie: ASPSESSIONIDCSRSASQQ=BBNKMMDAHPCKNOPANDLNAMBB; __utma=54023469.1060955171.1266258765.1266258765.1266261211.2; __utmc=54023469; __utmz=54023469.1266258765.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none); _csoot=1266258765171; _csuid=4a29a19622d7e271
Content-Type: application/x-www-form-urlencoded
Content-Length: 76

Userchoice=I+am+above+18+years+of+age&goingtoURL=get.asp%3Fi%3DV5088&state=1
Mit Folgendem Delphi-Code versuche ich das ganze nach zu machen:

Delphi-Quellcode:
parameter:=TStringStream.Create('Userchoice=I+am+above+18+years+of+age&goingtoURL=get.asp%3Fi%3D'+GetGetParam(url, 'i')+'&state=1');
IdHTTP1.Request.ContentType:='application/x-www-form-urlencoded';
html:=IdHTTP1.Post('http://www.xy.com/age-verification.asp', parameter);
parameter.Free;
Wireshark verrät mir das Folgender Request zu stande kommt:

Code:
POST /age-verification.asp HTTP/1.0
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 76
Host: [url]www.xy.com[/url]
Accept: text/html, */*
Accept-Encoding: identity
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.2) Gecko/20100115 Firefox/3.6
Cookie: ASPSESSIONIDCSRSASQQ=LNKLMMDAOBCGLOJIAEHACNOC
Cookie2: $Version="1"

Userchoice=I+am+above+18+years+of+age&goingtoURL=get.asp%3Fi%3DV5088&state=1
Als antwort bekomme ich bei meinem Delphi-Code einen 500 Errorcode zurück. (Internal Server Error) Komischerweise wird aber der Quelltext den ich haben möchte trotzdem gesendet, jedoch gibt IdHTTP.Post() keinen zurück, wahrscheinlich weil davon ausgegangen wird das nichts Sinnvolles ankommt.

Der Errorcode kommt aber nur wenn ich als Content-Type auch "application/x-www-form-urlencoded" angebe, wenn nicht kommt zwar kein Error, jedoch wird die Abfrage auch nicht bestätigt.

Weiß jemand was hier los ist?

Vielen Dank schon mal für alle Antworten!

stiftII 15. Feb 2010 22:34

Re: Bei IdHTTP bekomme ich einen 500 Error bei POST request
 
Versuche mal Idhttp1.HandleRedirects := true;

gORDon_vdLg 15. Feb 2010 22:48

Re: Bei IdHTTP bekomme ich einen 500 Error bei POST request
 
Danke für die Antwort, aber da würde er sagen Error 302, damit habe ich schon Bekanntschaft gemacht ;) Das habe ich bereits auf True gesetzt. Aber Trotzdem danke für deine Antwort!

geskill 8. Sep 2010 10:18

AW: Bei IdHTTP bekomme ich einen 500 Error bei POST request
 
Hi,
das Thema ist schon ein bisschen älter, aber ich hatte vor ein paar Wochen ein ähnliches Problem mit falschen Fehlercodes. Also der Server gibt absichtlich falsche Fehlercodes aus, um Automatisierte Scripte o.ä. zu stören.

Delphi-Quellcode:
try
  html := Post('http://www.toxicjunction.com/age-verification.asp', parameter);
except
  on E: EIdHTTPProtocolException do
  begin
    // Der Quellcode befindet sich in "E.ErrorMessage".
    // Ob der Fehler ein "Fake" ist oder nicht prüfe ich, indem ich nach
    // dem body-Tag im Quellcode suche.
    if not(Pos('<body>', LowerCase(E.ErrorMessage)) = 0) then
      html := E.ErrorMessage
    else
    begin
      // Fehlerbehandlung
    end;
  end;
end;
Außerdem würde ich in deiner Abfrage noch den Referer angeben, der wird gerne mal überprüft ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:39 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