uploaded.net login

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von aurevo.

    uploaded.net login

    Hallo,

    ich bin auf der Suche nach einer Möglichkeit mich bei uploaded.net einzuloggen und die Seite dann weiterzuverarbeiten.

    Die URL zum Login der API ist Folgende: uploaded.net/io/login

    Wie sende ich jetzt die Parameter "id" und "pw", dass ich danach eingeloggt bin und den authcode oder die session auslesen kann?

    MfG

    slice schrieb:

    Du könntest die HttpWebRequest Class nutzten - vergiss den CookieContainer nicht


    Ich habe mir da gerade aus mehreren gefundenen Sachen etwas zusammengeschustert:

    VB.NET-Quellcode

    1. Dim id = "ID"
    2. Dim pw = "Passwort"
    3. Dim Post As String = "id=" & id & "&pw=" & pw
    4. Dim tempCC As New CookieContainer
    5. Dim URL As String = "http://uploaded.net/io/login"
    6. Dim Request As HttpWebRequest = DirectCast(WebRequest.Create(New Uri(URL)), HttpWebRequest)
    7. Request.ContentType = "application/x-www-form-urlencoded"
    8. Request.CookieContainer = tempCC
    9. Request.Method = "POST"
    10. Request.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36"
    11. Request.ServicePoint.Expect100Continue = False
    12. Dim ByteArray() As Byte = System.Text.Encoding.UTF8.GetBytes(Post)
    13. Request.ContentLength = ByteArray.Length
    14. Dim DataStream As Stream = Request.GetRequestStream
    15. DataStream.Write(ByteArray, 0, ByteArray.Length)
    16. DataStream.Close()
    17. DataStream.Dispose()
    18. Dim Response As HttpWebResponse = DirectCast(Request.GetResponse(), HttpWebResponse)
    19. Dim Reader As New StreamReader(Response.GetResponseStream)
    20. Dim SourceCode As String = Reader.ReadToEnd
    21. Response.Close()
    22. Reader.Close()
    23. Reader.Dispose()
    24. Dim Cookies As New CookieCollection
    25. Cookies = tempCC.GetCookies(New Uri(URL))
    26. Dim auth As String = Cookies.Item("auth").Value
    27. Dim login As String = Cookies.Item("login").Value
    28. MsgBox(auth & vbNewLine & vbNewLine & Uri.UnescapeDataString(login))


    Da bekomme ich jetzt für "auth" folgende Ausgabe:
    12084582b37718b880499f00bb2159062fd5d745

    und für login:
    &id=ID&pw=d95419cab34d42c3042217e26eb088b0d0553ca1&cks=fae60cdbdde9


    Bin ich damit jetzt eingeloggt oder muss ich den Request noch irgendwie weiter verarbeiten?

    Beziehungsweise wie verarbeite ich diesen weiter um zum Beispiel an die Account Info zu kommen? Dafür die URL ist Folgende: http://uploaded.net/api/user

    Wie gehe ich da mit dem Cookie weiter bzw. mit dem selben Request?

    Zum Vergleich von einer bei Google gefundenen API der Login mit einem PHP-Script von it-gecko.de/uploaded-to-api-script.html:

    PHP-Quellcode

    1. protected function init_login()
    2. {
    3. $res = $this->get_curl('http://uploaded.net/io/login', 'id='.$this->user_id.'&pw='.$this->user_pw, false, true);
    4. if(preg_match('#<title>(.*?)Wartungsarbeiten</title>#im', $res)) {
    5. $this->login_status = false;
    6. $this->set_last_error(UP_ERR_MAINTENANCE, "Wartungsarbeiten");
    7. return false;
    8. }
    9. if(preg_match('#.'.preg_quote('{"err":').'#si', $res))
    10. {
    11. $this->login_status = false;
    12. $this->set_last_error(UP_ERR_LOGIN, "User-ID oder Passwort falsch");
    13. return false;
    14. }
    15. if(preg_match('#PHPSESSID\=[a-zA-Z0-9]+;#si', $res, $matches))
    16. $this->cookie_str = $matches[0];
    17. if(preg_match('#login\=.*?;#si', $res, $matches))
    18. $this->cookie_str .= $matches[0];
    19. if(preg_match('#auth\=[a-zA-Z0-9];#si', $res, $matches))
    20. $this->cookie_str .= $matches[0];
    21. $this->login_status = true;
    22. return true;
    23. }


    Die Funktion zur Account Info in PHP:

    PHP-Quellcode

    1. public function get_account_info()
    2. {
    3. $acc_info = $this->get_curl("http://uploaded.net/api/user");
    4. if(preg_match('#<title>(.*?)Wartungsarbeiten</title>#im', $acc_info)) {
    5. $this->set_last_error(UP_ERR_MAINTENANCE, "Wartungsarbeiten");
    6. return array('err' => 'Wartungsarbeiten');
    7. }
    8. if($acc_info === false || empty($acc_info))
    9. {
    10. return array('err' => 'Accountinfos konnten nicht gelesen werden');
    11. }
    12. $j = json_decode($acc_info);
    13. if($j === false || isset($j->err) || !isset($j->account))
    14. {
    15. return array('err' => 'Fehler bei der Verarbeitung');
    16. }
    17. $i = $j->account;
    18. $a = array();
    19. $a['id'] = $i->id;
    20. $a['created'] = strtotime($i->created);
    21. $a['alias'] = $i->alias->name->alias;
    22. $a['email'] = $i->alias->name->email;
    23. $a['acc_status'] = $i->alias->name->status;
    24. $a['traffic'] = $i->traffic->available;
    25. $a['expire'] = strtotime($i->pro->expire);
    26. $a['credit'] = (float)str_replace(",", ".", $i->affiliate->balance);
    27. $a['points'] = $i->affiliate->points;
    28. return $a;



    Habe von PHP leider keinen Überblick, kann damit vielleicht jemand etwas anfangen?

    C#-Quellcode

    1. // Create a request using a URL that can receive a post.
    2. HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://uploaded.net/io/login/");
    3. request.CookieContainer = cc;
    4. // Set the Method property of the request to POST.
    5. request.Method = "POST";
    6. // Create POST data and convert it to a byte array.
    7. string postData = "id=" + id + "&pw=" + pw;
    8. byte[] byteArray = Encoding.UTF8.GetBytes(postData);
    9. // Set the ContentType property of the WebRequest.
    10. request.ContentType = "application/x-www-form-urlencoded";
    11. // Set the ContentLength property of the WebRequest.
    12. request.ContentLength = byteArray.Length;
    13. // Get the request stream.
    14. Stream dataStream = request.GetRequestStream();
    15. // Write the data to the request stream.
    16. dataStream.Write(byteArray, 0, byteArray.Length);
    17. // Close the Stream object.
    18. dataStream.Close();
    19. // Get the response.
    20. WebResponse response = request.GetResponse();
    21. // Get the stream containing content returned by the server.
    22. dataStream = response.GetResponseStream();
    23. // Open the stream using a StreamReader for easy access.
    24. StreamReader reader = new StreamReader(dataStream);
    25. // Read the content.
    26. string responseFromServer = reader.ReadToEnd();
    27. // Display the content.
    28. Console.WriteLine(responseFromServer);
    29. reader.Close();
    30. dataStream.Close();
    31. response.Close();


    So hab ich das gelöst, habe den CookieContainer Global intialisiert, damit ich bei weiteren Anfragen den Cookie noch habe.

    (Ist leider C# aber lässt ja ziemlich leicht umschreiben :))

    Dokta schrieb:


    C#-Quellcode

    1. // Create a request using a URL that can receive a post.
    2. HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://uploaded.net/io/login/");
    3. request.CookieContainer = cc;
    4. // Set the Method property of the request to POST.
    5. request.Method = "POST";

    ...

    So hab ich das gelöst, habe den CookieContainer Global intialisiert, damit ich bei weiteren Anfragen den Cookie noch habe.

    (Ist leider C# aber lässt ja ziemlich leicht umschreiben :))


    Wo hast du da global initialisiert? Mir ist der Unterschied zur Version von mir nicht ganz eindeutig.

    Und wie benutze ich den Cookie jetzt bei zum Beispiel der folgenden Seite weiter? uploaded.net/api/user
    Ich habe einfach direkt unterhalb der Klasse einen Cookie Container intialisiert:

    C#-Quellcode

    1. public class Account
    2. {
    3. CookieContainer cc = new CookieContainer();
    4. ...}​


    Dann den CookieContainer dem request zugewiesen:

    C#-Quellcode

    1. ​request.CookieContainer = cc;


    Und dann kannst du einfach einen neuen request starten an die API Url und ihm auch den CookieCointainer mitgeben, dann bekommst du als Response direkt die API Ausgabe.

    Dokta schrieb:

    Ich habe einfach direkt unterhalb der Klasse einen Cookie Container intialisiert:

    C#-Quellcode

    1. public class Account
    2. {
    3. CookieContainer cc = new CookieContainer();
    4. ...}​


    Dann den CookieContainer dem request zugewiesen:

    C#-Quellcode

    1. ​request.CookieContainer = cc;


    Und dann kannst du einfach einen neuen request starten an die API Url und ihm auch den CookieCointainer mitgeben, dann bekommst du als Response direkt die API Ausgabe.


    Okay, so war das gemeint ;)

    Dann komme ich wieder zu der folgenden Frage, wie ich dem Request den CookieContainer und eine Datei mitgebe, weil es im Weiteren dann ja darum geht eine Datei hochzuladen, im folgenden Thread ging es schon um das selbe Thema und es war keine Lösung in Sicht: http://www.vb-paradise.de/index.php/Thread/105512-Senden-von-Datei-an-Upload-Dienst-Parameter-und-Daten%C3%BCbergabe/

    Vielleicht weißt du dazu ja einen Rat. :)
    Beim nächsten Request einfach den schon vorhandenen CookieContainer zuweisen (Request.CookieContainer = tempCC). Datei Upload hast du mehr oder weniger auch schon, an Zeile 16. in deinem Code. Du müsstest nur die Datei einlesen (als Byte - nicht String) und in den Stream schreiben *sofern UL das so erwartet, keine Ahnung wie die Parameter da aussehen*.

    Dokta schrieb:

    Hab mich nur mit dem Login beschäftigt, jedoch bin ich mir ziemlich sicher das wenn du etwas uploaden willst, solltest du nach "multipart/form-data" suchen.


    Das ist auf jeden Fall multipart/form-data, mit der HttpPostRequestLib von Dodo bekomme ich auch Dateien hochgeladen, nur unterstützt die keinen Cookie-Container. Jetzt habe ich den Cookie-Container ohne Dateiupload und in den anderen Threads konnte mir auch niemand wirklich sagen wie ich die Datei jetzt als Byte einlese und als Request absetze.
    Generell solltest du dich erstmal entscheiden: Willst du die Library nutzten oder das selbst schreiben?

    Library:
    Hast du dir schon in der Library HTTPPostRequest.Cookies angeschaut?

    selbst schreiben:
    Grundlagen lernen.

    slice schrieb:

    Generell solltest du dich erstmal entscheiden: Willst du die Library nutzten oder das selbst schreiben?

    Library:
    Hast du dir schon in der Library HTTPPostRequest.Cookies angeschaut?

    selbst schreiben:
    Grundlagen lernen.


    Die Library hat bei mir keine .Cookies. Entweder ist meine Version zu alt oder ich rufe das falsch auf.

    Wenn ich jetzt

    VB.NET-Quellcode

    1. reg = New HTTPPostRequest("http://www.blabla.de")


    und dann reg.Cookies eingebe kommt:

    Fehler 1 "Cookies" ist kein Member von "HttpPostRequestLib.Net.HTTPPostRequest".


    Grundlagen lernen ist grundsätzlich definitv der bessere Weg, allerdings auch länger und ab und an ist die einfachere Lösung wohl die Beste. In diesem Fall möchte ich am schnellsten das Ergebnis erzielen.