Entwickler-Ecke

Internet / Netzwerk - [IdHTTP] uploaded.to - login


the-kecks - Do 04.06.09 16:47
Titel: [IdHTTP] uploaded.to - login
hi,
ich hab mal wieder ein problem. ich möchte mich bei uploaded.to anmelden, er nimmt aber einfach die cookies nicht an (kriege kein log bei "OnNewCookie"). folglich gibt er auch nur immer die login seite aus (Memo2).
UPDATE: kann jetzt (wieder) compilieren, login klappt aber immernoch nicht -.- (siehe rs.com thread)
mein code:
-anmelden

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
begin
  [...]
  Params := TStringList.Create;
  try
    Params.Add('email=' + login);
    Params.Add('password=' + pw);
    try
      HTMLCode:=IdHTTP1.Post('http://uploaded.to/login', Params);
    except
      showmessage('Login fehlgeschlagen');
    end;
  finally
    Memo2.text:=HTMLCode;
    if pos('Login', HTMLCode) >0 then showmessage('Login fehlgeschlagen');
    Params.Free;
  end;
end;

-OnNewCookie

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
  if (ACookie.Path = ''then ACookie.Path :='/';
  Memo1.Lines.Add('New Cookie:');
  Memo1.Lines.Add('  Comment: '+ACookie.Comment);
  Memo1.Lines.Add('  Version: '+ACookie.Version);
  Memo1.Lines.Add('  CookieText: '+ACookie.CookieText);
  Memo1.Lines.Add('  ServerCookie: '+ACookie.ServerCookie);
  Memo1.Lines.Add('  ClientCookie: '+ACookie.ClientCookie);
  Memo1.Lines.Add('  Domain: '+ACookie.Domain);
  Memo1.Lines.Add('  Expires: '+ACookie.Expires);
  Memo1.Lines.Add('  CookieName: '+ACookie.CookieName);
  Memo1.Lines.Add('  Path: '+ACookie.Path);
  Memo1.Lines.Add('  Value: '+ACookie.Value);
  Memo1.Lines.Add('  DisplayName: '+ACookie.DisplayName);
  Memo1.Lines.Add('');

-FormCreate

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var SSLIOHandler: TIdSSLIOHandlerSocketOpenSSL;
begin
  SSLIOHandler := TIdSSLIOHandlerSocketOpenSSL.Create;
  IdHTTP1.CookieManager := IdCookieManager1;
  IdHttp1.IOHandler := SSLIOHandler;
  IdHTTP1.HandleRedirects := true;
  IdHTTP1.Request.UserAgent := 'Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10';
  [...]
end;


mfg


jaenicke - Sa 06.06.09 00:51

Hast du denn die IdSSLOpenSSL in der uses-Klausel?
Und die DLLs in deinem Programmverzeichnis?
Und warum benutzt du nicht TIdSSLIOHandlerSocketOpenSSL, wenn du OpenSSL benutzen möchtest?


the-kecks - Di 09.06.09 14:13

weiß niemand weiter :( ?

mfg


Xentar - Di 09.06.09 17:27

Antworte doch erstmal auf die Frage von jaenicke.


the-kecks - Di 09.06.09 20:29

siehe rs.com thread...
alles gemacht funzt aber immer noch nicht. kann IdHTTP1.Post(...) machen, nur wenn ich dann IdHTTP1.Get('uploaded.to/home'[ --> account daten (punkte etc.) raussuchen]) kommt der fehler EIdNotASocket "socket error # 10038 Socket operation on non-socket" :(
und wenn ich HTMLCode:=IdHTTP1.Post(...) mache ist HTMLCode=''

mfg


Xentar - Di 09.06.09 21:40

Und jetzt nochmal den ganzen Code? Aus diesen 2 Befehlen, die du jetzt nur noch beschrieben hast (die auch nix mehr mit dem Code aus dem ersten Beitrag zu tun haben?) werd ich so einzeln nicht schlau.
Und welchen rs.com Thread meinst du? Verlink das doch wenigstens, wenn du schon woanders noch nen Thread auf machst!

Btw: Was wird denn das Ganze eigentlich?


the-kecks - Di 09.06.09 22:15


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
Params := TStringList.Create;
  try
    Params.Add('email=' + login);
    Params.Add('password=' + pw);
    try
      HTMLCode:=IdHTTP1.Post('http://uploaded.to/login', Params);  //HTMLCode=''
    except
      showmessage('Login fehlgeschlagen');
    end;
  finally
    HTMLCode:=IdHTTP1.Get('http://uploaded.to/home'); //Socket error
    Memo2.text:=HTMLCode;
    if pos('Login', HTMLCode) >0 then showmessage('Login fehlgeschlagen');
    Params.Free;
  end;

es wird ein account checker für uploaded.to. Wie viel Traffic übrig ist etc.
rs.com thread [http://www.delphi-forum.de/topic_Rapidsharecom+Login+ueber+IndyIdHTTP_92387.html] (nicht von mir)

mfg


Xentar - Di 09.06.09 23:12

Du solltest dir echt nochmal den Sinn von try...finally angucken.. so wie du es einsetzt, ist es absolut NICHT gedacht.
ich denke mal, dass das HTTP.Get direkt nach dem Post geschehen sollte - und zwar nur, wenn dieses erfolgreich war. Vielleicht solltest du erstmal dafür sorgen, dass dies erfolgreich geschieht? Warum das nicht geht, kA.

Vielleicht wollen die auch einfach nicht, dass man sich da mit Fremdprogrammen einloggen kann?


the-kecks - Mi 10.06.09 17:34

jaja, mach ich ja alles noch. Erstmal solls funktionieren.
Die haben selber ein Tool gemacht wo man sich bei denen einloggen & uploaden kann. außerdem git es schon andere programme, die sich bei ul.to einloggen und daten rausfiltern können (zb jDownloader (in Java programmiert)).

mfg


Sirke - Mi 10.06.09 20:12

Ich weiß nicht wie viel du bereits herumgespielt hast und dies evtl schon probiert hast, aber du solltest schon alle Daten übertragen:


Delphi-Quelltext
1:
2:
3:
Params.Add('email=' + login);
Params.Add('password=' + pw);
Params.Add('submit=Login');


the-kecks - Mi 10.06.09 21:55

immernoch der gleiche fehler :(

mfg


the-kecks - Sa 11.07.09 16:38

hi,
melde mich nach längerer zeit nochmal zurück in diesem thread :D
nunja, ich bin jetzt schon etwas weiter aber so ganz klappt es immernoch nicht:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
  Params.Add('email=' + login);
  Params.Add('password=' + pw);
  Params.Add('submit=Login');
...
  IdHTTP1.IOHandler:= IdIOHandlerStack1; //defaultport = 80
  IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded';
  IdHTTP1.Request.Referer := 'http://uploaded.to/';
  
  HTMLCode:=IdHTTP1.Post('http://uploaded.to/login', Params);
    
  IdHTTP1.IOHandler:= IdSSLIOHandlerSocketOpenSSL1;
  IdHTTP1.Request.ContentType := '';
  IdHTTP1.Request.Referer := '';

weitere einstellungen:
IdHTTP:
- AllowCookies: true
- handleRedirects: true
- cookiemanager: IdCookieManager1
- userAgent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10

Obwohl ich den CookieManager1 ja als cookieManager angegeben habe, gibt mir IdHTTP1.Post die login seite zurück in der steht:
Login failed! Activate Cookies, please.

mfg


jaenicke - Sa 11.07.09 16:45

Erstens: Wozu behandelst du überhaupt das OnNewCookie Event? Ich weiß nicht, ob das Auswirkungen hat.
Zweitens: Warum änderst du den Pfad des Cookies?


the-kecks - Sa 11.07.09 17:10

das mit dem pfad hab ich inzwinschen raugenommen.
ich behandle das event, damit ich sehen kann ob ich einen cookie erhalten habe. aber leider zeichnet der ncihts auf :(

mfg


jaenicke - Sa 11.07.09 17:17

Vielleicht musst du vor dem Login erst einmal wirklich auf die Startseite statt nur den Referrer zu setzen?

Selbst habe ich bisher fast noch nie mit den Indys auf dem Formular gearbeitet, weil ich das etwas zu umständlich finde. Aber wenn da kein Cookie ankommt, dann wird das ja nicht daran liegen (wenn auf dem Formular alles richtig gesetzt ist natürlich).


the-kecks - Sa 11.07.09 17:28

also hab jetz mal vor das post IdHTTP1.Get('http://uploaded.to/'); gesetzt aber es funzt immernoch nicht :(

mfg


the-kecks - Di 14.07.09 22:16

so funzt es:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
procedure TForm1.Button1Click(Sender: TObject);
var
  HTMLCode, auth : String;
  Batch, cookies : TStringlist;
begin
  Batch:=TStringlist.Create;
  cookies:=TStringlist.Create;
  try
    Batch.Add('curl -L -b cookies.txt -c cookies.txt -d "email='+ edit1.Text +'&password='+ edit2.Text +'" "http://www.uploaded.to/login"');
    Batch.SaveToFile(ExtractFilePath(ParamStr(0)) + 'temp.bat');
    WinExec(PChar(ExtractFilePath(ParamStr(0)) + 'temp.bat'), SW_HIDE);
    sleep(2000);
    if FileExists(ExtractFilePath(ParamStr(0)) + 'cookies.txt'then cookies.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'cookies.txt')
    else
    begin
      showmessage('Login fehlgeschlagen');
      exit;
    end;
    auth := Copy(cookies.text, pos('auth  ',cookies.text)+5, length(cookies.text)-pos('auth  ',cookies.text)-6);
    IdHTTP1.CookieManager.AddCookie('auth=' + auth, 'uploaded.to'); //vorher: '.uploaded.to'
    try
      HTMLCode:=IdHTTP1.Get('http://uploaded.to/home');
    except
      on E:Exception do
        showmessage('Login Fehlgeschlagen: "' + E.Message + '"');
    end;
    Memo2.text:=HTMLCode;
  finally
    if FileExists(ExtractFilePath(ParamStr(0)) + 'temp.bat'then deletefile(ExtractFilePath(ParamStr(0)) + 'temp.bat');
    if FileExists(ExtractFilePath(ParamStr(0)) + 'cookies.txt'then deletefile(ExtractFilePath(ParamStr(0)) + 'cookies.txt');
    cookies.free;
    Batch.free;
  end;
end;

cookies.txt:
Zitat:

# Netscape HTTP Cookie File
# http://curlm.haxx.se/rfc/cookie_spec.html
# This file was generated by libcurl! Edit at your own risk.

.uploaded.to TRUE / FALSE 1342128589 lang en
.uploaded.to TRUE / FALSE 1342128589 auth 618683c1d06592b71ef9161bbf87ced9ba45c0



mfg


the-kecks - Mi 15.07.09 22:54

niemand ne idee? ich steh echt aufm schlauch :(
PS: hab auch schon gecheckt ob der hash geht, funzt einwandfrei (benutze nicht den hash, den ich hier angegeben hab. wär ja auchn bisschen doof den hier anzugeben :D)
//ES FUNZT :)
habe code editert!

mfg