![]() |
http upload aus einer "Form" heraus
also ich wollte mir für duckload.com n kleines proggie basteln, um via drag&drop meine sachen hochzuladen.
die anmeldung funktioniert schonmal bestens (danke an die helfer :thumb: ). jedoch haut der upload nicht hin. user: 123456123456 pass: 123456123456
Delphi-Quellcode:
kann einer helfen und sagen, wo der fehler liegt ?
procedure TForm1.uploadClick(Sender: TObject);
var MultiPartFormDataStream: TMsMultiPartFormDataStream; Response: String; begin MultiPartFormDataStream := TMsMultiPartFormDataStream.Create; // Objekte instanzieren try // Content-Type bestimmen idhttp1.Request.ContentType := MultiPartFormDataStream.RequestContentType; // Formular-Felder setzen, die keine Dateien sein sollen MultiPartFormDataStream.AddFormField('', ''); // ... // Datei laden MultiPartFormDataStream.AddFile('upload', 'c:\clock.avi', ''); // diese Methode muss _vor_ dem Senden augerufen werden MultiPartFormDataStream.PrepareStreamForDispatch; MultiPartFormDataStream.Position := 0; try // Anfrage abschicken, hier halt z.B. "deine" PHP-Datei hinsetzen Response := idhttp1.Post(s, MultiPartFormDataStream); // in der variablen 's' steht die url, wohin hochgeladen werden soll,da sich die url ändert except // Upload fehlgeschlagen, entsprechend reagieren end; finally MultiPartFormDataStream.Free; end; end; |
Re: http upload aus einer "Form" heraus
Eine etwas ausführlichere Fehlerbeschreibung als "haut nicht hin" wäre bestimmt hilfreich.
|
Re: http upload aus einer "Form" heraus
naja es kommt keine fehlermeldung oder sowas.
ich drücke meinen button fürs hochladen, dann geschieht der zugriff aufs inet (sagt meine firewall) und für n paar sek ist das proggie am arbeiten (der upload dauert nur wenige sekunden). aber wenn ich dann auf den account bei duckload.com schaue (user und passwort sind richtig eingetragen zum einloggen :wink: ), ist dort keine datei angekommen. die url zum hochladen in der variable 's' wird geparsed mit Pos, PosEx und Copy, da sich diese immer ändert. |
Re: http upload aus einer "Form" heraus
Cross-Post im DF:
![]() |
Re: http upload aus einer "Form" heraus
danke :thumb:
|
Re: http upload aus einer "Form" heraus
ich poste mal den ganze code, vllt lässt sich das dann besser der fehler finden :gruebel:
Delphi-Quellcode:
unit duck1709;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, MsMultiPartFormData, IdCookieManager, StrUtils, pngimage, ExtCtrls, GIFImg; type TForm1 = class(TForm) Edit1: TEdit; login: TButton; IdHTTP1: TIdHTTP; Edit2: TEdit; Memo1: TMemo; upload: TButton; IdCookieManager1: TIdCookieManager; storXX: TButton; Label1: TLabel; Edit3: TEdit; Image1: TImage; Label2: TLabel; Label3: TLabel; Image2: TImage; Image3: TImage; procedure loginClick(Sender: TObject); procedure uploadClick(Sender: TObject); procedure storXXClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; StringList, sl: TStringList; Edit3: TEdit; s: string; implementation {$R *.dfm} procedure TForm1.loginClick(Sender: TObject); begin StringList := TStringList.Create; //TStringList erstellen try StringList.Values['yl_name'] := '123456123456'; //Edit1.Text; StringList.Values['yl_pw'] := '123456123456'; //Edit2.Text; StringList.Values['yl_submit'] := 'Login'; idhttp1.Post('http://duckload.com/index.php?Modul=Login', StringList); memo1.Lines.Text := idhttp1.Post('http://duckload.com/member/', StringList); finally StringList.Free; //Speicherfreigeben end; end; //////////////////////////////////////////////////////////////// procedure TForm1.storXXClick(Sender: TObject); var Position1, Position2: Integer; begin s := idhttp1.Get('http://duckload.com/index.html'); //sucht nach action=" und gibt die Position im String zurück, //wir erhalten die Position von a möchten aber wissen was zwsichen // " und " steht. Also zählen wir die Länge des Suchstrings dazu Position1 := pos('action="', s) +8; //wir suchen nach dem abschließenden ", ab unserer ersten Position, //könnten ja mehrere " im String sein... Position2 := PosEx(s, '"', Position1) - 1; //wir kopieren den Text zwischen unseren Positionen, Copy erwartet //aber nicht die Position des letzten Zeichen als dritten Parameter //sondern die Anzahl der zu kopieren zeichen, da darfst du jetzt mal selbst überlegen ;-) s := Copy(s, Position1, 48); edit3.Text := s; // Ausgabe des benutzten Stores end; //////////////////////////////////////////////////////////////// procedure TForm1.uploadClick(Sender: TObject); var MultiPartFormDataStream: TMsMultiPartFormDataStream; Response: String; begin MultiPartFormDataStream := TMsMultiPartFormDataStream.Create; // Objekte instanzieren try // Content-Type bestimmen idhttp1.Request.ContentType := MultiPartFormDataStream.RequestContentType; // Formular-Felder setzen, die keine Dateien sein sollen MultiPartFormDataStream.AddFormField('', ''); // ... // Datei laden MultiPartFormDataStream.AddFile('upload', 'clock.avi', 'multipart/form-data'); // diese Methode muss _vor_ dem Senden augerufen werden MultiPartFormDataStream.PrepareStreamForDispatch; MultiPartFormDataStream.Position := 0; try // Anfrage abschicken, hier halt z.B. "deine" PHP-Datei hinsetzen Response := idhttp1.Post(s, MultiPartFormDataStream); except // Upload fehlgeschlagen, entsprechend reagieren end; finally MultiPartFormDataStream.Free; end; end; end. |
Re: http upload aus einer "Form" heraus
also ich hab mir mal die fehlerseite rückgeben lassen:
Code:
was musste ich da lesen:
<html><head><title>Error</title><link rel='stylesheet'
href='http://youload.to/design/beta2/youload.css?37' type='text/css' media='screen' charset='utf-8' /><link rel='stylesheet' href='http://youload.to/design/beta2/global.css?37' type='text/css' media='screen' charset='utf-8' /></head><body><div class='error_message'>No file Uploaded! [url='test.php']Back[/url]</div></body></html> --> NO FILE UPLOADED wo steckt dann denn hier beim upload der fehler ?
Delphi-Quellcode:
procedure TForm1.uploadClick(Sender: TObject);
var MultiPartFormDataStream: TMsMultiPartFormDataStream; Response: String; begin MultiPartFormDataStream := TMsMultiPartFormDataStream.Create; // Objekte instanzieren try // Content-Type bestimmen idhttp1.Request.ContentType := MultiPartFormDataStream.RequestContentType; // Formular-Felder setzen, die keine Dateien sein sollen // MultiPartFormDataStream.AddFormField('', ''); // ... // Datei laden MultiPartFormDataStream.AddFile('upload', 'c:\clock.avi', ''); // diese Methode muss _vor_ dem Senden augerufen werden MultiPartFormDataStream.PrepareStreamForDispatch; MultiPartFormDataStream.Position := 0; try // Anfrage abschicken, hier halt z.B. "deine" PHP-Datei hinsetzen Response := idhttp1.Post(s, MultiPartFormDataStream); memo1.Lines.Text := Response; except // Upload fehlgeschlagen, entsprechend reagieren end; finally MultiPartFormDataStream.Free; end; end; |
Re: http upload aus einer "Form" heraus
:oops: :oops: könnte vllt mal jemand drüberlunsen ob er nicht den fehler findet ? :oops: :oops:
|
Re: http upload aus einer "Form" heraus
ok, wenn keiner ne lösung weiß, dann werd ich das demnächst auf eis legen... hab den upload nach anleitung gemacht, aber irgendwo klemmts und ich find nicht raus wo...
habs auch mal bei DF gepostet - da scheint auch keiner den fehler zu finden :?: |
Re: http upload aus einer "Form" heraus
Schau mal diesen Block an:
Delphi-Quellcode:
Es ist natürlich ziemlich suboptimal, jegliche Exceptions unter den Teppich zu kehren.
try
// Anfrage abschicken, hier halt z.B. "deine" PHP-Datei hinsetzen Response := idhttp1.Post(s, MultiPartFormDataStream); memo1.Lines.Text := Response; except // Upload fehlgeschlagen, entsprechend reagieren end; Ändere das mal so ab, dann hast du zumindest die Chance das Problem zu finden:
Delphi-Quellcode:
try
// Anfrage abschicken, hier halt z.B. "deine" PHP-Datei hinsetzen Response := idhttp1.Post(s, MultiPartFormDataStream); memo1.Lines.Text := Response; except on E:Exception do begin // Fehler protokollieren memo1.Lines.Text := E.Message; memo1.Lines.Add(E.ClassName); end; end; |
Re: http upload aus einer "Form" heraus
ok, danke für den hinweis ;) hab die exception mal eingefügt - aber es passiert nichts. es wird keine exception geworfen und gibt somit auch keine (fehler)meldung :shock: :shock:
|
Re: http upload aus einer "Form" heraus
Wenn du weiter dranbleiben willst, dann brauchst du einen Proxy wie z.B.
![]() Du schaltest den Fiddler zwischen deinen Browser und das Internet und beobachtest den Datenverkehr. Dann das Gleiche mit deiner Anwendung. Ist natürlich eine ziemliche Detektivarbeit... |
Re: http upload aus einer "Form" heraus
mhhh, brauch ich das unbedingt ? ich hab bisher HTTPFox und LiveHTTPHeaders genutzt, um alle benötigten infos zu bekommen. oder macht fiddlers was, was die beiden von mir genannten plugins nicht können ?
also ich habs mal getestet... und es liefert auch die angaben, die die anderen 2 plugins bringen. aber ich habe noch einen fehler zurück bekommen: "datei wurde nciht gefunden" - jedoch ist die datei zu 10000% da. sie ist einfach auf C:\ und im ordner, wo auch das aktuelle projekt ist. es macht also kein unterschied ob ich
Delphi-Quellcode:
oder
// Datei laden
MultiPartFormDataStream.AddFile('upload', 'c:\clock.avi', 'multipart/form-data');
Delphi-Quellcode:
eingebe...
// Datei laden
MultiPartFormDataStream.AddFile('upload', 'clock.avi', 'multipart/form-data'); wieso kommt diese fehlermeldung ? |
Re: http upload aus einer "Form" heraus
Liste der Anhänge anzeigen (Anzahl: 1)
ich hab mal die duck.pas(4kb) und die clock.avi(80kb) angehängt (mit winrar komprimiert auf 17kb). vllt möchte es ja mal jemand testen und findet den fehler :shock:
ich bin mit meinem geringen wissen am ende edit: bitte nicht über den "code" schimpfen :oops: er ist nicht gut geschrieben bzw aufgeräumt, aber er ist kommentiert und funktioniert :-D |
Re: http upload aus einer "Form" heraus
hats mal einer getestet und kann n statement abgeben ?
|
Re: http upload aus einer "Form" heraus
Hallo,
versuch es vielleicht mal mit TIdMultiPartFormDataStream aus der Unit IdMultipartFormData. Ich war gerade auf der Homepage, wieso ist dein erster Parameter bei AddFile "upload"? Müsste es nicht "file[]" sein? Grüße |
Re: http upload aus einer "Form" heraus
ok, ich hab mal TIdMultiPartFormDataStream genutzt. es wird hochgeladen. aber erscheint wieder nicht in meinem account... die anmeldung funktioniert aber !
Zitat:
DANKE dass du dir die arbeit machst und mir helfen willst ;) |
Re: http upload aus einer "Form" heraus
Ich habe bei dem Anbieter keinen Account, deshalb weiß ich nicht wie es dort mit dem Hochladen aussieht, aber ich kann mir gut vorstellen, dass du noch einen weiteren Parameter mitschicken muss (Account ID, Absenden Button [...]), oder Cookies etc. aktivieren muss. Aber das ist reine Spekulation.
Momentan ist auch deren DB nicht erreichbar :( |
Re: http upload aus einer "Form" heraus
jo immo is DB down :(
also wenn du magst: user 123456123456 pass 123456123456 ich schicke noch folgendes mit:
Delphi-Quellcode:
und so sieht das laden der datei aus:
MultiPartFormDataStream.AddFormField('upload', '');
Delphi-Quellcode:
IdCookieManager1 ist auch schon mit rinjebastelt :D
MultiPartFormDataStream.AddFile('file[0]', 'c:\clock.avi', 'multipart/form-data');
|
Re: http upload aus einer "Form" heraus
hat sich mal einer angemeldet mit oben angegebenen daten und geschaut woran es liegen könnte ?
kann es sein, dass ich für den upload noch sowas wie ne progress-id benötige ? wenn ich den upload durch httpfox laufen lasse, bekomme ich bei METHOD POST: h**p://stor19.duckload.com:666/upload/upload.php?X-Progress-ID=58aa11bc71f1309f071b2f5526e2d6e5 jedoch kann ich die nirgendwo "auslesen" :?: :?: |
Re: http upload aus einer "Form" heraus
ok, also ein nochmalige prüfung ergab, dass ich NICHT angemeldet bleibe und darin liegt auch das prob.
ich nutze den cookiemanager und der ist auch in idhttp eingetragen... aber ich bleibe nicht eingeloggt. muss ich bei dem cookiemanager noch etwas ändern/einstellen ? |
Re: http upload aus einer "Form" heraus
Zitat:
|
Re: http upload aus einer "Form" heraus
eingeloggt werde ich, da ich mir die seite zurückgeben lassen hab und da der button LOGOUT angezeigt wird. dieser wird nicht angezeigt, wenn man nicht eingeloggt ist. hab extra geschaut ;)
also liegt es am cookiemanager ? |
Re: http upload aus einer "Form" heraus
gibt es denn beim cookiemanager irgend welche einstellungen, die ZWINGEND gemacht werden müssen, oder reicht es, den in idhttp.cookiemanager einzubinden ?
|
Re: http upload aus einer "Form" heraus
sooo, radikalkur. hab alles gelöscht und neu gemacht. irgendwas hatte ich verstellt bei idhttp oder beim cookiemanager. :oops: :oops:
die anmeldung läuft jetzt und ich bleibe auch angemeldet. ich kann meine eigenen daten nun von der webseite auslesen. jedoch geht der upload immer noch nicht auf mein account, sondern ins nirvana. was könnte das bedeuten ? |
Re: http upload aus einer "Form" heraus
Du sendest nicht die Daten die der Server verarbeitet.
ZB. Falsche Formfelder, Felder vergessen. ID falsch. Die ID kannst du übrigens beim einloggen schon bekommen. Indem du nach dem Post "idhttp.URL.GetFullURI" ausführst das gibt dir das zurück was nach dem einloggen in der adresszeile steht, dahin kannste dann die weiteren Post anfragen senden ;). ~stift |
Re: http upload aus einer "Form" heraus
Zitat:
|
Re: http upload aus einer "Form" heraus
Hallo nochmal.
Für Firefox gibt es ein tolles Addon, das heißt "Tamper Data". Damit kannst du sehen, welche Formulare, Daten und ID's gesendet werden nachdem du auf "upload file"(oder wie der button heißen mag) klickst ;). ~stfit |
Re: http upload aus einer "Form" heraus
boah jeder schlägt was anderes vor ;) ich nutze schon LiveHttpHeader und HttpFox :stupid: also dann teste ich auch nochmal "Tamper Data" - vllt finde ich damitja alle felder und ids und postdaten und so :mrgreen:
|
Re: http upload aus einer "Form" heraus
Der Vorteil bei Tamper Data ist, dass du die Daten die gesendet werden vor dem Senden noch verändern kannst ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:09 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