Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Indy post Problem (https://www.delphipraxis.net/117514-indy-post-problem.html)

itzgyl88 19. Jul 2008 15:56


Indy post Problem
 
hallo ...
ich möchte ein bild an den bilderhost www.imagecrate.de senden. die erlaubnis des hosters habe ich dafür. jetzt stellt sich folgendes problem:

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.

blackdrake 20. Jul 2008 19:06

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: http://www.example.com/script.php?foo=bar

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 http://www.imagecrate.de/index.php?page=upload durch, hast du GET und POST in einem. Ich weiß nicht, ob Indy oder der Server damit durcheinander kommen. Wie sieht es bei dem Image-Dienst aus? Machen die in ihren HTML-Formular das selbe?

Probiere doch mal, page=upload als POST anstelle von GET mitzusenden. Du würdest also ein POST-Request an http://www.imagecrate.de/index.php senden.

Wenn das nicht geht, lade dir einen Packet-Logger (ich empfehle SmartSniff = Freeware) herunter, starte das Logging (vorher internetaktive Programme wie ICQ, Outlook schließen) und poste ein Bild über den Browser. Schau dir dann mal genau das Datenpaket an und speichere es. Wie sieht das Request genau aus? Wie sieht die Response aus? (Enthält das Response-Paket ggf. eine HTTP-Redirect Zeile? Sniffe ggf. auch den Datentransfer deines (bisher nicht funktionierenden) Programmes und vergleiche es mit dem Soll-Ergebnis des Browser-Uploads. Du siehst bestimmt schnell, woran es liegen könnte und wo Unterschiede sind.

Gruß
blackdrake

Björn Ole 20. Jul 2008 20:05

Re: Indy post Problem
 
Hi.

Zitat:

Zitat von itzgyl88
auch die request daten habe ich angepasst (host, referer ect.)

Dort liegt selten die Fehlerquelle. In meinen bisherigen Programmen, die POST-Requests gesendet haben (und das sind einige), brauchte ich nie diese Informationen mitzuschicken.


Hänge aber mal ein
Delphi-Quellcode:
DataStream.AddFormField('upload', '1');
an. Das wird zumindest beim manuellen Senden mitgeschickt.

Gruß, Björn

blackdrake 20. Jul 2008 20:11

Re: Indy post Problem
 
Zitat:

Zitat von Björn Ole
Dort liegt selten die Fehlerquelle.

Halb-Richtig. Die Angabe "Referer" wird zwar selten geprüft, aber "Host" ist wichtig bei Servern mit vielen Domains (z.B. Confixx). Ein Confixx-System kennt bei einer eingehenden GET/POST Anfrage seine eigenen Domains nicht, weswegen "Host" eine wichtige Angabe ist.

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:

Zitat von Björn Ole
Hänge aber mal ein
Delphi-Quellcode:
DataStream.AddFormField('upload', '1');
an.

Ja, das kann auch wichtig sein. Kleiner Hinweis noch: Der "Senden"-Button hat meistens auch einen Namen, dessen Wert als "1" ebenfalls mitgesendet wird.

Gruß
blackdrake

itzgyl88 20. Jul 2008 20:33

Re: Indy post Problem
 
Hallo.

Zitat:

Zitat von Björn Ole
Hänge aber mal ein
Delphi-Quellcode:
DataStream.AddFormField('upload', '1');
an. Das wird zumindest beim manuellen Senden mitgeschickt.

Zitat:

Zitat von blackdrake
Kleiner Hinweis noch: Der "Senden"-Button hat meistens einen auch Namen, dessen Wert als "1" ebenfalls mitgesendet wird.

Beides habe ich ohne Erfolg probiert. Ich gehe davon aus, dass es dieses POST / GET Problem sein wird. Allerdings habe ich auch probiert page=upload im POST zu übergeben, was keinen Erfolg brachte.

Ich werde mir morgen früh den Sniffer besorgen und mal sehen, ob ich weiter komme.
Danke für die Hilfe :hi:

Gruß.

Björn Ole 20. Jul 2008 21:01

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. ;)

blackdrake 20. Jul 2008 21:02

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?

Björn Ole 20. Jul 2008 21:13

Re: Indy post Problem
 
Zitat:

Zitat von blackdrake
Und wenn es kein JPEG ist (sondern PNG, GIF)?

Dann sendet er 'image/png' oder 'image/gif'. Wo liegt das Problem?

blackdrake 20. Jul 2008 21:16

Re: Indy post Problem
 
Zitat:

Zitat von Björn Ole
Wo liegt das Problem?

An der Universalität sowie der antistatischen Programmierung. Wenn das HTML-Formular (der Browser) mit "multipart/form-data" Erfolg hat, sollte dieses universelle MIME-Format auch verwendet werden - man sollte zumindestens versuchen, es so hinzubekommen, wenn es geht.

Björn Ole 21. Jul 2008 00:21

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?


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:02 Uhr.
Seite 1 von 2  1 2      

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