Filehoster - Upload

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Afritus.

    Filehoster - Upload

    Guten Tag,

    mich würde stark interessieren, ob und wie es möglich ist, eine beliebige Datei mit VB.NET auf einen Filehoster (Rapidshare.com, Uploaded.to etc.) hochzuladen. Habe es bereits mit Live HTTP Headers versucht (also dieses POST und HttpRequest), aber leider wurde ich daraus nicht wirklich schlau und weiß auch nicht, was ich da bei den jeweiligen Sachen reinschreiben muss (beispielsweise wo ich den Pfad der Datei deklarieren muss). Hat jemand von Euch eventuell eine Idee?

    MfG
    Markus
    Hallo,

    leider ist es nicht so einfach auf solche Filehoster etwas hoch zu laden, da man sich vorher autorisieren muss und da viel Javascript und andere Sicherheitstechniken nebenher laufen. Deswegen bieten viele dieser Hoster auch extra eigene Uploader an.
    Wenn diese keine API dafür anbieten dann wird es alles andere als einfach einen eigenen Upload zu realisieren.
    Da eben Daten und Dateien über POST Senden nicht gerade einfach ist, habe ich mal eine Lib gemacht, kannst ja mal damit versuchen. Getestet habe ich sie bisher nur mit eigenen Scripts und Bildhostern wie Imageshack, directupload.net usw.

    [Release] [Version 2.1] HttpPostRequestLib

    Edit: Also wenn ich mir RS anschaue findet man im Quelltext folgendes

    HTML-Quellcode

    1. <form class="upload_form_big" enctype="multipart/form-data" method="post">
    2. <input value="1" name="rsapi_v1" type="hidden">
    3. <input value="0" name="realfolder" type="hidden">
    4. <input class="upload_input_big" name="filecontent" onchange="clickedOnUpload(this);" multiple="multiple" type="file">
    5. </form>



    Übersetzt in meine Lib sähe es dann so aus

    VB.NET-Quellcode

    1. Imports HttpPostRequestLib.Net Public Class Form1 Private WithEvents reg As HTTPPostRequest Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click reg = New HTTPPostRequest("http://www.rapidshare.com") reg.Post.Add("rsapi_v1", "1")
    2. reg.Post.Add("realfolder", "0")
    3. reg.Files.Add("filecontent", "d:\pfad\zur\datei.txt")
    4. reg.SubmitASync()
    5. End Sub
    6. End Class

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Dodo“ ()

    Das ist schonmal ne riesige Hilfe, danke. Ich sehe, da gibt es sogar zwei Events für ProgressChanged und SubmitComplete ;)
    Aber wie kann ich z.B. bei Rapidshare nach dem Upload nun den Link herausfinden, unter dem man die Datei herunterladen kann? Ich habe es mit GetResponse versucht, aber hierfür gibt
    es keine Klasse.
    MfG
    Nun wenn es nicht Asynchron machst bekommst du als Return der Submit() Funktion den Quelltext der seite, ansonsten im SubmitComplete Event in der Variable e.Sourcecode oder so ähnlich.

    VB.NET-Quellcode

    1. Dim Source As String = reg.Submit()


    oder

    VB.NET-Quellcode

    1. Private Sub reg_SubmitComplete(ByVal sender As Object, ByVal e As SubmitEventArgs) Handles reg.SubmitComplete
    2. TextBox1.Text = e.Sourcecode
    3. End Sub


    Das steht aber in meinem Beispiel drin wenn mal genau geschaut hättest.
    Woher entnimmst du denn aus deinem Codeausschnitt an welche Adresse der POST Request gesendet wird?
    Das wird bei Rapidshare über JavaScript erledigt?

    Dodo schrieb:

    Da eben Daten und Dateien über POST Senden nicht gerade einfach ist, habe ich mal eine Lib gemacht, kannst ja mal damit versuchen. Getestet habe ich sie bisher nur mit eigenen Scripts und Bildhostern wie Imageshack, directupload.net usw.

    [Release] [Version 2.1] HttpPostRequestLib

    Edit: Also wenn ich mir RS anschaue findet man im Quelltext folgendes

    HTML-Quellcode

    1. <form class="upload_form_big" enctype="multipart/form-data" method="post">
    2. <input value="1" name="rsapi_v1" type="hidden">
    3. <input value="0" name="realfolder" type="hidden">
    4. <input class="upload_input_big" name="filecontent" onchange="clickedOnUpload(this);" multiple="multiple" type="file">
    5. </form>



    Übersetzt in meine Lib sähe es dann so aus

    VB.NET-Quellcode

    1. Imports HttpPostRequestLib.Net Public Class Form1 Private WithEvents reg As HTTPPostRequest Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click reg = New HTTPPostRequest("http://www.rapidshare.com") reg.Post.Add("rsapi_v1", "1")
    2. reg.Post.Add("realfolder", "0")
    3. reg.Files.Add("filecontent", "d:\pfad\zur\datei.txt")
    4. reg.SubmitASync()
    5. End Sub
    6. End Class
    Nun da beim Formular kein Parameter für "action" angegeben ist wird beim Submit an die aktuelle Seite geschickt. Wie gesagt ob das funzt weiß ich nicht, hatte ehrlich auch keine Lust mich jetzt groß damit zu befassen, sondern das sollte nur ein Beispiel sein.
    Ansonsten müsste man mal den Header mitschneiden oder JS analysieren.
    Ok, bei e.SourceCode steht nirgendwo der Downloadlink drinnen. Also habe ich eine Testdatei hochgeladen und währenddessen mit HTTP Live Headers mitgeschnitten. Nun bin ich etwas verwirrt, da selbst im Mitschnitt der Downloadlink nicht zu finden ist... Wie kann man den herausfinden?
    Btw ja, e.SourceCode habe ich wohl übersehen, sry.
    MfG
    Zur kurzen Info hab ich euch mal den Code der Javascript Funktion herausgesucht

    Wie ihr seht macht die Funktion an sich nicht viel, außer immer weiter verzweigt eine Reihe von Funktionen aufzurufen welche schlussenlidch auch irgendwo nen Downloadlink generieren:

    Leider ist dieser mehr als kompliziert gestaltet und zum Auslesen mit zu vielen Variablen versehen, die man nicht alle auslesen kann!

    Quellcode

    1. szFilesTpl += '<p><span>Download-Link:</span><input onclick="this.select();" class="dllink" type="text" value="'+window.location.protocol+'//rapidshare.com/files/'+obj.fileid+'/'+obj.filename+'" readonly="readonly" /></p>'+(system["user"]["settingsloaded"]?'':('<p><span>Delete-Link:</span><input onclick="this.select();" class="dllink" type="text" value="'+window.location.protocol+'//rapidshare.com/#!index|deletefiles|'+obj.killcode+'|'+obj.fileid+'|'+obj.filename+'" readonly="readonly" /></p>'));

    Spoiler anzeigen

    Quellcode

    1. function clickedOnUpload(target, callback)
    2. {
    3. _uploadID = createUploadID();
    4. _uploadTarget = target;
    5. // create upload iframe
    6. createUploadIframe(_uploadID);
    7. //debug(target.files);
    8. apicall(window.location.protocol+"//api.rapidshare.com/cgi-bin/rsapi.cgi?sub=nextuploadserver_v1", function(r) {
    9. var _filename = _uploadTarget.value;
    10. _filename = _filename.replace(/\\/g, "/");
    11. var a = _filename.split("/");
    12. if(a.length > 0)
    13. {
    14. _filename = a[a.length - 1];
    15. }
    16. // Patch MultiUpload
    17. if (target.files && target.files.length>0) {
    18. try {
    19. _filename = "";
    20. _filesize = 0;
    21. for(var i=0;i<target.files.length;i++) {
    22. _filename += target.files[i].fileName+", ";
    23. _filesize += target.files[i].fileSize;
    24. }
    25. _filename = _filename.substr(0,_filename.length-2);
    26. if(_filesize>_maxUploadSize) {
    27. showerror(szxTranslate("ERROR: Filesize exceeds maximum of ###bytes### Bytes.",{"bytes":_maxUploadSize}),3000);
    28. return false;
    29. }
    30. } catch(e) {debug(e)}
    31. }
    32. var res = r.responseText;
    33. var subDomain = parseInt(res);
    34. //subDomain=1;// zum debuggen
    35. if(!isNaN(subDomain))
    36. {
    37. var status = "Uploading";
    38. upload(subDomain, _filename, callback);
    39. }
    40. else
    41. {
    42. removeIframeElement("uploadFrame_"+_uploadID);
    43. }
    44. });
    45. }
    Wie gesagt mit Filehostern habe ich mich nie beschäftigt, btw. musste dir mal das Javascript anschauen ob da irgendwo mit AJAX die Dateien geladen werden und das Result wird dann der Link ausgegeben. Da musst du jetzt experimentieren, diese Arbeit nehme ich dir sicher nicht ab und poste dir dann den richtigen Code.