![]() |
Indy post Problem
hallo ...
ich möchte ein bild an den bilderhost ![]() DataStream := TIdMultiPartFormDataStream.Create; DataStream.AddFile('file', Datei, 'multipart/form-data'); stringvar := idHTTP.Post('http://www.imagecrate.de/index.php?page=upload', DataStream); .... führe ich diesen code aus, komme ich lediglich wieder auf die seite inde.php und die datei ist weder hochgeladen, noch kann ich den link auslesen, da kein source vorhanden ist. bei anderen scripts funktioniert das jedoch super - einziger unterschied: es gibt kein "?page=upload", was daher anscheinend das problem mit indy verursacht. handleredirects ist an und auch die request daten habe ich angepasst (host, referer ect.) - trotzdem bleibt der erfolg aus :< ... wer kann mir helfen ? es muss doch zu machen sein ein bild dort hochzuladen und die seite mit den links zu bekommen. |
Re: Indy post Problem
Hallo.
Kenne diesen Image-Dienst nicht, daher kann ich darüber nichts berichten. Problematisch sehe ich aber die GET/POST-Mischung (die bei manchen HTML-Formularen auch Probleme macht). Ein GET-Request sieht so aus: ![]() Bei PHP hast du dann $_GET['foo'] = 'bar'. Bei einem POST-Request werden die Daten ja nicht über die Request-URL an den Server gereicht. In PHP wäre dann die Variable $_POST['foo'] = 'bar' und nicht $_GET['foo'] gesetzt. Führst du nun aber einen POST-Request mit ![]() Probiere doch mal, page=upload als POST anstelle von GET mitzusenden. Du würdest also ein POST-Request an ![]() Wenn das nicht geht, lade dir einen Packet-Logger (ich empfehle ![]() Gruß blackdrake |
Re: Indy post Problem
Hi.
Zitat:
Hänge aber mal ein
Delphi-Quellcode:
an. Das wird zumindest beim manuellen Senden mitgeschickt.
DataStream.AddFormField('upload', '1');
Gruß, Björn |
Re: Indy post Problem
Zitat:
Allgemein sollte man aber die künstliche Anfrage möglichst realitätsgetreu (siehe TCP/IP-Sniffer Hinweis) gestalten, falls sich auf der Serverseite die Sicherheits-/SPAM-Vorkehrungen verschärfen. Zitat:
Gruß blackdrake |
Re: Indy post Problem
Hallo.
Zitat:
Zitat:
Ich werde mir morgen früh den Sniffer besorgen und mal sehen, ob ich weiter komme. Danke für die Hilfe :hi: Gruß. |
Re: Indy post Problem
Habs hinbekommen.
Der Server mag als ContentType wohl kein 'multipart/form-data', von wegen nicht unterstütztes Dateiformat. Nimm einfach 'image/jpeg', dann gehts. ;) |
Re: Indy post Problem
Und wenn es kein JPEG ist (sondern PNG, GIF)? Vielleicht hat Indy kein Filename mitgegeben, mitdessen der Server die Erweiterung ".jp(e)g" ablesen konnte?
|
Re: Indy post Problem
Zitat:
|
Re: Indy post Problem
Zitat:
|
Re: Indy post Problem
Wer sagt, dass der Browser 'multipart/form-data' sendet?
Habe eben ein gif hochgeladen und es wurde 'image/gif' gesendet, allgemein lässt sich höchstwahrscheinlich also sagen 'image/' + erlaubter Dateityp. Dieses Verhalten ist auch das einzig (mir) einleuchtende, denn wie sonst soll der Server überprüfen, ob es sich bei dem gesendeten Inhalt um ein erlaubtes Dateiformat handelt? |
Re: Indy post Problem
Zitat:
Code:
(Ich denke, dass das auch so in den Post-Request eingeht und nicht vom Browser in image/... gewandelt wird. Man müsste ein Bild hochladen und mit einem TCP/IP-Sniffer gucken, was wirklich als Content-Type gesendet wird.
<form enctype="multipart/form-data" action="index.php?page=upload" method="post">
Ansonsten bestimmte ich persönlich immer auf der Serverseite mit LowerChar(ExtractFileExt($_FILE['filename'])) == [jpg, gif, jpeg, png], um welches Format es sich handelt. Gruß blackdrake |
Re: Indy post Problem
Zitat:
Zitat:
|
Re: Indy post Problem
Jetzt habt ihr mich verwirrt. Ich dachte das Problem ginge jetzt ganz leicht zu lösen, indem ich den ContentType ändere - es scheint auch tatsächlich halb zu funktionieren, nur leider eben nicht ganz.
Wenn ich jetzt ein Bild hochlade, bekomme ich den source der Seite zurück, leider ohne den wichtigen Inhalt. Das sieht dann so aus:
Delphi-Quellcode:
und dazwischen sollte der Code stehen, in dem auch die Links sind. Ich habe den richtigen ContentType beachtet und auch mit dem LiveHeader FF Addon getestet .. was kann ich da noch tun ? o.OGruß. |
Re: Indy post Problem
Der folgende Code liefert mir ein korrektes Ergebnis und sollte zudem "serververträglich" sein:
Delphi-Quellcode:
Ergebnis (Ausschnitt)
var
DataStream: TIdMultiPartFormDataStream; Response: string; begin DataStream:=TIdMultiPartFormDataStream.Create; try IdHTTP1.Request.ContentType:='multipart/form-data'; DataStream.AddFormField('upload','1'); DataStream.AddFile('file','C:\test.gif','image/gif'); Response:=IdHTTP1.Post('http://www.imagecrate.de/index.php?page=upload',DataStream); finally DataStream.Free; end; end;
Code:
<tr>
<td rowspan="11" valign="top" width="170"><div align="center">[url="http://www.imagecrate.de/view.php?id=2532"][img]http://www.imagecrate.de/upload/thumb/83148_test.gif[/img][/url] [b]83148_test.gif[/b]</div></td> <td> |
Re: Indy post Problem
Danke, mein Fehler war anscheinend, dass ich erst die Datei zum Stream hinzugefügt hatte und danach "upload=1" ..
Was anderes konnte ich als Fehlerquelle bei mir nicht ausmachen - den Rest hatte ich so schon die ganze Zeit. :shock: Danke! Gruß. |
Re: Indy post Problem
Ich hab mal in meinem Code die beiden Zeilen vertauscht und es funktionerte auch ohne Probleme. Dein Fehler muss also woanders gelegen haben. Aber hauptsache, es funktionert jetzt. :wink:
Gruß, Björn |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz