Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   IdHTTP und ein ungewöhnlicher Doppelpost (https://www.delphipraxis.net/163452-idhttp-und-ein-ungewoehnlicher-doppelpost.html)

kingmarv 29. Sep 2011 10:21

IdHTTP und ein ungewöhnlicher Doppelpost
 
Hallo

Ich möchte euch erstmal mein Problem schildern:
Ich habe probiert nen kleines Upload Tool für einen der vielen One Click Hoster zu Programmieren ála Rapdishare & Co.
Ich habe mir einen herrausgesucht der keine "öffentliche" Api anbietet, da ich gerne alles von vorne bis hinten selbst machen wollte.
Funktionieren tut das alles wunderbar, bis auf an der Stelle wo die Datei per POST an das Upload Script übergeben wird.
Die Datei wird einmal Hochgeladen, und wenn der Upload fertig ist, startet der gleiche Upload nochmal, was theoretisch technisch garnicht möglich ist weil vom One Click Hoster aus für jeden Upload ne neue Session ID generiert.
Ich habe auch ein TCP/IP Sniffer neben her laufen gehaben, meine Progressbar ist nicht fehlerhaft, wenn sie bei 100% ist Spuckt mir der Sniffer die Antwort vom Server aus das mit dem Upload alles geklappt hat.

Also hier meine Frage, warum startet er nach dem Upload direkt den gleiche Upload hinterher?
Ich hab schon alles in OnWork und WorkBegin kommentiert weil ich dachte das es daran liegt, hat aber keine änderung gebracht.
Ich poste mal den Source evt kann mir wer helfen.

Danke schonmal im vorraus.


Delphi-Quellcode:
postdata := tstringlist.Create;
 postdata.Add('user=xxxx') ;
  postdata.Add('&pass=xxxx') ;
  postdata.Add('&submit=Login') ;
  s:=idhttp1.Post('http://freakshare.com/login.html',postdata);
 memo1.Lines.Add(s);
postdata.Free;

/// Code zum filtern der Session IDs
///
///
///


stream:=TIdMultiPartFormDataStream.Create;


stream.AddFormField('APC_UPLOAD_PROGRESS',para2);
stream.AddFormField('APC_UPLOAD_USERGROUP',para3);
stream.AddFormField('UPLOAD_IDENTIFIER',para4);
stream.AddFile('file[0]','C:\VC_RED.cab', 'application/octet-');

//Label1.Caption:='Upload auf xxx. com';

glob:=true;
memo1.Clear;
s:=idhttp1.Post('http://'+para1+'.freakshare.com/upload.php',Stream);
memo1.text:=s;
stream.Free;
glob:=false;

procedure TForm1.IdHTTP1Work(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCount: Int64);
  var ElapsedTime : Cardinal;
begin

 if glob=true then begin

Gauge1.Progress:=AWorkCount;
ElapsedTime := SecondsBetween(Now,FStartDate);
statusbar1.Panels[0].Text:='Upload Progress: ' +inttostr(round(Aworkcount/1024))+' kb / '+inttostr(round(Gauge1.MaxValue/1024))+' kb.'+' - '+inttostr(ElapsedTime) ;

//IdAntiFreeze1.process;

end
else
begin
end;
 Application.ProcessMessages();

end;



procedure TForm1.IdHTTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCountMax: Int64);
begin
if glob=true then begin
Gauge1.MaxValue:=AWorkCountMax;
end;
end;

procedure TForm1.IdHTTP1WorkEnd(ASender: TObject; AWorkMode: TWorkMode);
begin
 if glob=true then begin
Gauge1.MaxValue:=0;
glob:=false;
end;
end;

geskill 29. Sep 2011 11:04

AW: IdHTTP und ein ungewöhnlicher Doppelpost
 
Könnte mir vorstellen, dass du in der TIdHTTP Komponente
Delphi-Quellcode:
HandleRedirects := True;
und
Delphi-Quellcode:
RedirectMaximum > 0;
eingestellt hast und diese dann das auf die weitergeleitete URL nochmals hochläd. Prüfe einfach mal via WireShark was da im Detail abgeht. Dein Vorhaben sieht hier auch sehr nach "Grauzone" aus. Quellcode formatieren! try..finally..end benutzen!

kingmarv 29. Sep 2011 11:55

AW: IdHTTP und ein ungewöhnlicher Doppelpost
 
Hallo geskill

Danke für deine Antwort, ja habe HandleRedirects auf true und das das Redirect Maximum auf 2. Geprüft habe ich es ja schon und es läuft folgendermaßen ab:

Mein Upload startet...
Mein Upload ist bei 100% und abgeschlossen..
Mein Sniffer empfängt die Antwort vom Server mit der *.html wo die hochgeladene Datei angesteuert werden kann...
Mein Programm schreibt allerdings nicht die Antwort vom Server in das Memo sondern startet dann den gleichen Upload nochmal
Wenn der zweite Upload bei 100% ist, wird auch in dem Memo die richtige Antwort ausgegeben.

Nur ein Upload zuspät. ;)

Zum Thema Grauzone, in der AGB des hier benutzten One Click Hosters steht nirgends das man ihre Engine nicht über nen Third Party Programm ansteuert darf. Solange ich deren AGB´s Kenne und Akzeptiere bin ich auf der Richtigen Seite, sons wären jegliche Scripts, Programme (jDownloader), ect nicht zugelassen.

geskill 29. Sep 2011 15:57

AW: IdHTTP und ein ungewöhnlicher Doppelpost
 
Nachdem du das hochgeladen hast, macht der Server von Freakshare einen Weiterleitung auf eine HTML Antwortseite, die du gerne haben willst. Die TIdHTTP Komponente denkt aber, dass es sich bei der Weiterleitung um eine Korrektur handelt (da
Delphi-Quellcode:
RedirectMaximum = 2
), sprich es sendet die Upload-Daten nochmals an diese HTML Antwortseite. Veränderte RedirectMaximum mal auf 0/1; dies kannst du ja auch erst nach dem erfolgreichen Login machen.

kingmarv 29. Sep 2011 22:28

AW: IdHTTP und ein ungewöhnlicher Doppelpost
 
das war ne gute idee, ich dachte schon das würde den gewünschten erfolg erzielen aber leider negativ, auch wenn ich RedirectMaximum nach dem login unter 2 setze bleibt jedes mal der redirect zur Html aus wo die Links für den Hochgeladen File stehen.
Also muss dieser Doppelte Upload irgendwo vorher zustande kommen.

jaenicke 30. Sep 2011 06:32

AW: IdHTTP und ein ungewöhnlicher Doppelpost
 
Vielleicht kannst du da in OnRedirect mit Handled oder so ähnlich etwas machen.


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