Laden...

Postdaten an Webseite schicken(Rapidshare)

Erstellt von zero_x vor 16 Jahren Letzter Beitrag vor 15 Jahren 8.078 Views
zero_x Themenstarter:in
1.044 Beiträge seit 2008
vor 16 Jahren
Postdaten an Webseite schicken(Rapidshare)

Hallo liebe Community,

Mein Ziel: ich möchte in C# ein kleines Programm schreiben, welches mir die Arbeit mit den Downloaden von RapidShare vereinfacht.

Vorab: Mit Rapidshare meine ich Rapidshare.com und nicht Rapidshare.de(nicht das wir aneinander vorbei reden). Rapidshare ist ein Filehoster der Datein hoch- und runterladen kann. Der Haken dabei ist das ein Downloadlimit gibt. Man kann pro Stunde eine gewisse anzahl downloaden. Je mehr man downloadet, desto mehr warten. Hinzu kommt noch das eingeben eines Sicherheitsbild, sprich Captcha. Die Captchas und die Wartezeit gilt nur Freeuser. Für Premiumuser können geben Gebür ohne Captcha(Sicherheitsbild eingabe) und fast unbegrentzt downloaden.

Soweit wie ich verstanden hab muss man an Rapidshare Postdaten schicken um an den Download zu kommen. Ich möchte es erst als Freeuser versuchen. Ich schau mir mithilfe des Firefox Plugins: Live HTTP headers mir die Postdaten an. Wenn ich eine Datei habe(bereits hochgeladen) und ich auf den Freebutton klicke wird folgendes gesendet:

POST /files/102494075/Wasserlilien.jpg :::

Ich habe mir nun in Visual Studio 2008 eine WinForm erstellet mit:*1. RichTextBox für das Anzeigen des Quelltextes *1. Button für das Senden der Postdaten aus der TextBox *1. TextBox für die Eingabe der Postdaten(mit Button bestätigen)

Mein Code für den Button ist folgender:


            WebRequest request = WebRequest.Create("http://rs154.rapidshare.com/files/102494075/Wasserlilien.jpg"); // Link
            request.Method = "POST";
            string postData = this.textBox1.Text;
            byte[] byteArray = Encoding.UTF8.GetBytes(postData);
            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = byteArray.Length;
            Stream dataStream = request.GetRequestStream();
            dataStream.Write(byteArray, 0, byteArray.Length);
            dataStream.Close();
            WebResponse response = request.GetResponse();
            //this.textBox2.Text = ((HttpWebResponse)response).StatusDescription; // OK ?
            dataStream = response.GetResponseStream();
            StreamReader reader = new StreamReader(dataStream);
            string responseFromServer = reader.ReadToEnd();
            this.richTextBox1.Text = responseFromServer; // Quelltext in der TextBox anzeigen
            reader.Close();
            dataStream.Close();
            response.Close();

Wenn ich nun in der TextBox **:::

Okay, der erste Teil funktioniert wunderbar. Aber wie kann ich den Download starten? Wenn ich z.B.

POST /files/102494075/2356207/Wasserlilien.jpg :::

Poste funktioniert das nicht. Der Download wird nicht gestartet. Natürlich hab ich die X's durch den Captchacode richitig erstzt.

**:::

Mein Text ist wohl etwas groß geraten. Ich hoffe mal ich hab im richtigen Bereich gepostet? 😉 Ich wäre sehr froh auf eure Hilfe! 🙂

Mit freundlichen Grüßen,
Zero_x 🤔

2.760 Beiträge seit 2006
vor 16 Jahren

Wie kann ich den Download starten(Meine eignedliche Frage)

Du musst das schicken was dein Browser auch schickt (musst du selbst rausfinden (evtl. Wireshark für die kompletten Daten)).

Wie kann ich herausfinden wie lange die Wartezeit ist(nicht Downloadlimit!)

Welche? Bis der Download abgeschlossen ist? Bis du downloaden kannst?
Das erste kannst du nur spekulieren, für letzteres hilft die Seite zu parsen (z.B. mit Regex).

Wie kann ich herausfinden wie lang das Downloadlimit ist

Hä? Wat is dat?

Ob der Server defekt ist
Ob zu viele downloden

Anrufen und fragen oder auf einen Timeout warten.

Außerdem könntest du mal probieren ob dein bisheriger code funktioniert wenn du die Signatur z.B. des Internet explorers mitsendest. Ich hab mal aus Gaudi einen WebRequest an google geschickt ohne die Signatur eines Browsers mitzuschicken und musste dann für eine gewisse Zeit Captchas abtippen um auf google groups zu kommen da die Angst vor spambots hatten.

Außerdem solltest du dir wenn du viele Dateien (meist zweifelhaften Inhalts) von Rapidshare runterladen möchtest einfach einen Account zulegen.

zero_x Themenstarter:in
1.044 Beiträge seit 2008
vor 16 Jahren

Hallo jaensen,
*Wartezeit:Bbei Rapidshare gibt es eine Wartezeit. Je größer die Datei ist, desto länger die Wartezeit. Die Wartezeit muss man abwarten wenn man Freeuser ist. Also die Zeit zwischen dem Downloaddialog auf Rapidshare und dem klicken auf den Freebuttons.

*Downloadlimit: Die Wartezeit vom Downloadlimit ist die Zeit wo man _suspendiert _ist. Wenn ich z.B. eine Datei als Freeuser downloade muss ich anschließend warten bis die Zeit abgelaufen ist, bevor ich weiterdownloaden kann.

Nein, Spambots möchte ich nicht gegen Captchas schreiben. Natürlich soll es nicht illegal werden. Es soll ein einfacher Downloadmanager werden der Free- und Premiumuser unterstützt. Zuerst möchte ich aber nur Freeuser 😉

Naja, so richtig hast Du mir nicht weitergeholfen.

Wie kann ich den Download starten ?( Das ist meine eignedliche Frage 🤔

MfG,
Zero_x 🙂

X
1.177 Beiträge seit 2006
vor 16 Jahren

Hallo zero_x,

na, dann Versuch ich es mal mit ner schlechten Nachricht für Dich: Rapidshare versucht genau dass zu verhindern. Das bedeutet, dass für jeden smarten Kerl hier 2 Smarte Kerle bei Raipidshare kommen.

Aber natürlich geht es, garantiert... Bilde alles nach was nach was Rapidsahre will (nimm mal Filddler zum analysieren), Parse Quelltext um den Dowload zu finden, bilde Javascript-checksums nach. etc. Btw. die notieren z.B. deine IP und setzen sie auf ne Blacklist. Wenn du nicht mehr auf der stehst bekommt du einen Random Server zum downloaden zugewiesen.

hmm, Ich ab mich mal gegen das Experiment entschieden und mir einen Permium-Acc für 5€ geholt, dann kann es auch jeder Download-Manager.

🙂

Xynratron

PS: Typos: hab grad echt kalte Finger...

Herr, schmeiss Hirn vom Himmel - Autsch!

Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.

zero_x Themenstarter:in
1.044 Beiträge seit 2008
vor 16 Jahren

Hallo Xynratron,

wie soll ich den Quelltext parsen? Ich verstehe es so das ich erst Postdaten an Rapidshare schicken muss damit der Download freigegeben wird. Von welchen Checksums redest Du? Meinst Du das in Bezug auf CRC32? 🤔

Naja, so ganz hat mir das auch nicht weitergeholfen 🙁

PS: Typos: hab grad echt kalte Finger...

Drausen ist es doch warm 😉 Woher kommen dann die kalten Finger 8o

MfG,
Zero_x

M
14 Beiträge seit 2007
vor 16 Jahren

Ich habe vor langer Zeit auch mal sowas programmiert. der Unterschied ist dass es für Premiumuser ist. Die Datei wird nur kurz angeladen. -> Das musst du im GET ändern. Von mir aus kannst du den Quellcode haben da ich keine Verwendung dafür habe. Bei Fragen einfach PN an mich.

Ein Downloadinstanz:

rsLoader loader = new rsLoader(tbPName.Text, tbPPass.Text);
                    loader.makeSocket();
                    loader.sendRequest("http://rapidshare.com/files/93005426/pm_3_2007.pdf");
                    String newHost = loader.recRequest();
                    loader.loadFile(newHost);

stringfunctions.cs:

using System;
using System.Text;
using System.Windows.Forms;
using System.Data;



public class stringfunctions {

    public static String Mid(string strSrc, int startIndex, int length) {
        String result = null;
        if (startIndex > 0) {
            result = Microsoft.VisualBasic.Strings.Mid(strSrc, startIndex, length);
        }
        return result;
    }

    public static int Asc(String strSrc) {
        int erg = Microsoft.VisualBasic.Strings.Asc(strSrc);
        return erg;
    }

    public static String Base64_Encode(String strSource) {
        String strTempLine = null;
        int i = 0;
        const String BASE64_TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

        for (i = 1; i <= (strSource.Length - strSource.Length % 3); i += 3) {
            strTempLine = strTempLine + Mid(BASE64_TABLE, (Asc(Mid(strSource, i, 1)) / 4) + 1, 1);
            strTempLine = strTempLine + Mid(BASE64_TABLE, ((Asc(Mid(strSource, i, 1)) % 4) * 16 + Asc(Mid(strSource, i + 1, 1)) / 16) + 1, 1);
            strTempLine = strTempLine + Mid(BASE64_TABLE, ((Asc(Mid(strSource, i + 1, 1)) % 16) * 4 + Asc(Mid(strSource, i + 2, 1)) / 64) + 1, 1);
            strTempLine = strTempLine + Mid(BASE64_TABLE, (Asc(Mid(strSource, i + 2, 1)) % 64) + 1, 1);
        }
        if ((strSource.Length % 3) != 0) {
            if ((strSource.Length % 3) == 2) {
                strTempLine = strTempLine + Mid(BASE64_TABLE, (Asc(Mid(strSource, i, 1)) / 4) + 1, 1);
                strTempLine = strTempLine + Mid(BASE64_TABLE, (Asc(Mid(strSource, i, 1)) % 4) * 16 + Asc(Mid(strSource, i + 1, 1)) / 16 + 1, 1);
                strTempLine = strTempLine + Mid(BASE64_TABLE, (Asc(Mid(strSource, i + 1, 1)) % 16) * 4 + 1, 1);
                strTempLine = strTempLine + "=";
            } else if ((strSource.Length % 3) == 1) {
                strTempLine = strTempLine + Mid(BASE64_TABLE, Asc(Mid(strSource, i, 1)) / 4 + 1, 1);
                strTempLine = strTempLine + Mid(BASE64_TABLE, (Asc(Mid(strSource, i, 1)) % 4) * 16 + 1, 1);
                strTempLine = strTempLine + "==";
            }
        }
        return strTempLine;
    }

    public static String LinkValidate(String strData) {
        if (strData != "") {
            StringBuilder MyStBu = new StringBuilder(strData);
            MyStBu.Replace("\n", "");
            MyStBu.Replace("\r", "");
            MyStBu.Replace("\t", "");
            MyStBu.Replace(" ", "");
            MyStBu.Replace(".html", "");
            strData = MyStBu.ToString();
        }
        return strData;
    }

    public static String LinkSplitter(String strData) {
        String strErg = null;
        int pos1 = 0;
        if (strData.Contains("http:")) {
            pos1 = strData.IndexOf("http:", 5);
            if (pos1 == -1) {
                pos1 = strData.Length;
            }
                strErg = strData.Substring(0, pos1);
        }
        return strErg;
    }

    public static String LinkGrabber(String strData) {
        int pos1 = 0;
        if (strData.Contains("http:") == true) {
            pos1 = strData.IndexOf("http:", 5);
            if (pos1 == -1) {
                pos1 = strData.Length;
            }
            StringBuilder strBuilder = new StringBuilder(strData);
            strBuilder.Remove(0, pos1);
            strData = strBuilder.ToString();
        }
        if (strData.Length == 0) { strData = null; }
        return strData;
    }

    public static bool LinkViewer(String strLink, DataSet ds) {
        bool erg = false;
        String buffer = null;
        for (int i = 0; i < ds.Tables[0].Rows.Count; i++) {
            buffer = Convert.ToString(ds.Tables[0].Rows[i]["colLinks"]);
            if (buffer == strLink) {
                erg = true;
            }
        }
        return erg;
    }
}

rsLoader.cs :

using System;
using System.Net;
using System.Net.Sockets;
using System.Security;
using System.Windows.Forms;
using System.Text;
using System.Collections;
using System.Threading;
using System.IO;

public class rsLoader {
    String username;
    String passwort;
    String host;
    Socket socket;
    int port;
    int framesize;

	public rsLoader(String user, String pass){
        username = user;
        passwort = pass;
        host = "rapidshare.com";
        port = 80;
        framesize = 1024;
	}

    public void makeSocket() {
        try {
            IPHostEntry hostInfo = Dns.GetHostEntry(host);
            IPEndPoint ep = new IPEndPoint(hostInfo.AddressList[0], port);
            socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socket.Connect(ep);
        } catch (SecurityException ex) {
            MessageBox.Show("Verbindung zum Server nicht möglich. Firewall deaktivieren!", "Verbindungsfehler");
        } catch (Exception ex) {
            MessageBox.Show("Verbíndung zum Server nicht möglich.", "Verbindungsfehler");
        }
    }

    public void closeSocket() {
        //socket.Shutdown(SocketShutdown.Both);
        socket.Close();
    }

    public void sendRequest(String url) {
        String end = "\r\n";
        String strCmd = null;
        
        int pos = url.IndexOf("/files/", 0);
        url = url.Substring(pos, url.Length - pos);

        strCmd = "GET " + url + " HTTP/1.1 " + end;
        strCmd = strCmd + "Host: rapidshare.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6" + end;
        strCmd = strCmd + "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5" + end;
        strCmd = strCmd + "Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3" + end;
        strCmd = strCmd + "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7" + end;
        strCmd = strCmd + "Connection: close" + end;
        strCmd = strCmd + "Range: bytes=0-" + framesize + end;
        strCmd = strCmd + "Authorization: Basic " + stringfunctions.Base64_Encode(username + ":" + passwort) + end + end;


        Byte[] finalCmd = Encoding.ASCII.GetBytes(strCmd);
        socket.Send(finalCmd, finalCmd.Length, SocketFlags.None);
    }

    public String recRequest() {
        Byte[] recv = new Byte[1024];
        int bytes = 0;
        String answer = null;
        do {
            bytes = socket.Receive(recv, recv.Length, SocketFlags.None);
            answer = answer + Encoding.ASCII.GetString(recv, 0, bytes);
        } while (bytes > 0);
        closeSocket();
        return answer;
    }

    public bool loadFile(String newLink) {
        bool erg = true;
        if (newLink.IndexOf("Moved", 0) > 0) {
            String newHost = null;
            String end = "\r\n";
            String strCmd = null;
            String url;

            int pos1 = newLink.IndexOf("Location:");
            int pos2 = newLink.LastIndexOf(".rapidshare");
            newHost = newLink.Substring(pos1 + 17, pos2 - (pos1 + 17));
            int pos3 = newLink.IndexOf("/files/", 0);
            int pos4 = newLink.IndexOf("Content-Length:", 0);
            url = newLink.Substring(pos3, (pos4 - end.Length) - pos3);
            
            
            strCmd = "GET " + url + " HTTP/1.1" + end;
            strCmd = strCmd + "Host: " + newHost + ".rapidshare.comUser-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6" + end;
            strCmd = strCmd + "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5" + end;
            strCmd = strCmd + "Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3" + end;
            strCmd = strCmd + "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7" + end;
            strCmd = strCmd + "Connection: close" + end;
            strCmd = strCmd + "Range: bytes=0-" + framesize + end;
            strCmd = strCmd + "Authorization: Basic " + stringfunctions.Base64_Encode(username + ":" + passwort) + end + end;
            //MessageBox.Show(strCmd);

            host = newHost + ".rapidshare.com";
            Byte[] finalCmd = Encoding.ASCII.GetBytes(strCmd);
            makeSocket();
            socket.Send(finalCmd, finalCmd.Length, SocketFlags.None);
            System.Threading.Thread.Sleep(100);
            
            
            Byte[] recv = new Byte[1024];
            int bytes = 0;
            String answer = null;
            do {
                bytes = socket.Receive(recv, recv.Length, SocketFlags.None);
                answer = answer + Encoding.ASCII.GetString(recv, 0, bytes);
            } while (bytes > 0);

            MessageBox.Show(answer);
            closeSocket();
        } else {
            erg = false;
            closeSocket();
        }
        return erg;
    }
}

zero_x Themenstarter:in
1.044 Beiträge seit 2008
vor 16 Jahren

Hallo McLovin,

vorerst vielen Dank für die mühe, aber da gibt es noch ein kleines Problem 😦. Ich hab kein Premiumaccount, sondern ich bin Freeuser und möchte auch Freeuser bleiben. Wie ist es möglich den Code als Freeuser umzuschreiben? Eigentlich hab ich schon die Hälfte, nur ich weiß nicht wie ich den Download starten soll. Das ist mein größtes Problem. Und ein noch größeres Problem ist das herausfinden der Wartezeit zwischen den klicken des Freebuttons und des Downloaddialogs auf Rapidshare.

Ich wäre sehr froh auf eine Antwort 😉. Ich habe alles im ersten Post kommentiert wie die Postdaten heißen...

MfG,
Zero_x 🙂

P.S.: Ich habe Dir eine PN geschickt 🙂

zero_x Themenstarter:in
1.044 Beiträge seit 2008
vor 16 Jahren

Hallo liebe Community,

bekomme ich von Euch keine Antwort 8o? Ist meine Frage wirklich so schwer X(? Ich wäre trozdem sehr froh auf eine Antwort 🙂.

MfG,
Zero_x

2.760 Beiträge seit 2006
vor 16 Jahren

Die Antwort wurde doch schon gepostet:
Du musst rausfinden welche Daten geschickt werden diese ebenfalls schicken.
Wenn da variable Werte dabei sind musst du sie finden und auch mitschicken, wenn du diese Werte nur aus der Seite bekommst musst du den Quelltext parsen.

Es wurde doch schon genug Material vorgegeben, du kannst nicht von uns erwarten das wir dir ein Regex schreiben, die Seite analyisieren usw...

zero_x Themenstarter:in
1.044 Beiträge seit 2008
vor 16 Jahren

Hallo jaensen,

ich erwarte von Euch nicht das Ihr mir einen RegEx erstellt. Das mache ich natürlich selber. In erster Linie geht es mir darum herauszufinden, wie ich den Download starten kann. Ich kann doch natürlich das Captcha aus dem Quelltext vorübergehend auslesen. Ich habe selber beschrieben wie es geht, also das Posten der Postdaten. Wie genau es geht verstehe ich nicht.

Ich verstehe es so, dass ich ähnlich wie bei einen anderen Download auch eine klasse implemtieren muss welcher mir den Download startet, weil von alle dem Posten kann der Download nicht starten. Ich versteh das doch richitg, oder?!

Ich hoffe mal mir kann es jemand präzieser erklären wie genau ich den Download starte, weil von alle dem Posten kann kein Download starten. Eine zweite "Download"-Klasse muss her 🤔? Und genau das ist mein Problem.

Ich hoffe mir kann jemand helfen 😉.

MfG,
Zero_x 🙂

2.760 Beiträge seit 2006
vor 16 Jahren

Du wirst wohl einen Response bekommen in dem der Mirror steht von dem du den Download dann beziehen kannst.
Der Server den du Fragst gibt dir z.B. den Download nicht direkt sondern die Addresse eines anderen Mirrors z.B. von dem du dann Downloaden kannst.
Und darum musst du dich nun mal selber kümmern da das die Analyse des Netzwerkverkehrs betrifft und wahrscheinlich keiner die Lust und Zeit hat für dich rauszufinden wie diese Weiterleitung genau zu Stande kommt.
Schau dir z.B. Sourceforge an, da ist das genauso.

Das basiert jetzt alles auf Vermutungen da ich eben nicht nachgeschaut habe wie das abläuft, stelle es dir wie eine Telefonvermittlung vor.

M
14 Beiträge seit 2007
vor 16 Jahren

lade dir das: RSDF und zum aktualisieren das hier: LINK. Lässt ein download starten. Vorher startest du Wireshark und protolollierst was da so abläuft. Vorallem die Http Reqest's. Dannach solltest du rekonstruieren wie dein Programm arbeitet. Kleiner Tipp: Schau dir vorher noch das HTTP-Protokoll an um die Grundfunktionalität anzueignen.

zero_x Themenstarter:in
1.044 Beiträge seit 2008
vor 16 Jahren

Hallo McLovin,

ich verstehe das so, dass ich den "Session-Link" aus dem Quelltext entnehmen muss. Hier mal ein Beispiel:

http://rs21tl.rapidshare.com/files/104641894/:::

Das orange hinterlegte steht für den direkten Downloadlink. Die X'se stehen natürlich für Zahlen. Also macht das keinen Unterschied, da von diesem Link aus der Download gestartet wird?! Muss man nicht von der ersten Instanz, wo dl.start=Free gepostet wird nicht den Download starten? Ich hoffe ich hab mich verständlich genug ausgedrückt 😉.

MfG,
Zero_x 🙂

X
1.177 Beiträge seit 2006
vor 16 Jahren

Hallo zero_x,

ich denke um Deine Frage befriedigend zu klären müsste irgendwer mal mit entsprechenden Tools bei Rapidshare den Netzwerkverkehr ansehen. Mach das doch einfach selbst: Fiddler

Dann siehst Du was dein Browser an Rapid schickt und was zurückkommt. Das musst Du dann nachbauen...

🙂

Xynratron

Herr, schmeiss Hirn vom Himmel - Autsch!

Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.

zero_x Themenstarter:in
1.044 Beiträge seit 2008
vor 16 Jahren

Hallo Xynratron,

ich glaube, dass Du mich nicht richitig verstanden hab oder ich Dich. Ich erkläre etwas präziser: Damit ich den Download starten kann, muss ich den Captchacode an Rapidshare schicken. Das ist kein Problem. Nur das Problem ist, wie ich den Download starte?! Wenn ich z.B. eine simple Datei herunterladen will erstelle ich eine instanz der Klasse: **WebClient **und starte über das instanziiertes Objekt die Methode: **:::

Ich hoffe jetzt ist mein Problem etwas verstänlicher 😉. Ich wäre sehr froh auf Eure hilfe 🙂.

MfG,
Zero_x 🙂

3.971 Beiträge seit 2006
vor 16 Jahren

Es ist richtig dass du mit WebRequest Anfragen an einen Server/Url schicken kannst und du ein Response mit der Seite empfängst.

Wenn der Download allerdings mit JavaScript oder PageRefresh ausgeführt wird, hast du ein Problem. Du müsstest einen eigenen Webbrowser schreiben, der die entsprechenden Werte auswertet und aufruft.

Du könnest auch das WebbrowserControl verwenden und es fernsteuern

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

2.760 Beiträge seit 2006
vor 16 Jahren

Wenn der Download allerdings mit JavaScript oder PageRefresh ausgeführt wird

Dann könntest du versuchen mit dem Windows Scripting Host zu arbeiten der, glaube ich, auch JScript kann.
http://www.codeproject.com/KB/cs/ZetaScriptingHost.aspx (Allerdings für VBScript)

X
1.177 Beiträge seit 2006
vor 16 Jahren

Hallo zero_x,

naja, wer jetzt wen nicht versteht weiss ich auch nicht. Aber wenn Du ganz genau nachsiehst was dein Browser macht, dann kannst du auch sehen was bei deiner Umsetzung anders läuft - da das mit Fiddler auch mitgelogged wird.

Vielleicht bekommt dein Browser ja auch erst den Quelltext und da steht dann z.B. wie kleines_eichhoernchen meinte, JavaScript drin. Das ganze wird dann so schnell abgearbeitet, dass Du visuell garnicht mitbekommst mit wievielen Seiten sich dein Browser zwischendrin noch verbindet. Deswegen rate ich ja zu einem Analysetool um mal hinter die Kulissen zu schauen und nicht immer raten zu müssen. Anhand der Anforderungen die dein Browser schickt und die Du schickst siehst Du ja die Unterschiede - denn eigentlich sollten die Anforderungen und die Antworten ja gleich sein. Was machst du denn, wenn Rapidshare z.B. einen Download Serverseitig nur freischaltet, wenn der Browser auch brav irgendein Bild geladen hat? (nicht dass ich wüsste ob das passiert, aber wenn ich Programmierer bei Rapidshare wäre ürden mir noch ein duzend dinge einfallen, um download-Clients auszusperren)

Hast Du es denn schon ausprobiert!? Dann poste doch mal die Header welche Dein Browser für den Filedownload abschickt und was Dein Programm abschickt.

🙂

Xynratron

Herr, schmeiss Hirn vom Himmel - Autsch!

Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.

N
118 Beiträge seit 2005
vor 16 Jahren

Hi,
erstmal danke fuer den netten Src dort oben, so weit klappt der ganz gut.. aber eine Frage habe ich dann doch.. man bekommt ja die 'eigentliche' dateiURL zurueck und koennte doch von da an mit Webclient.DownloadFile arbeiten, oder?
Ich frage, weil es bei mir nicht zu funktionieren scheint - alles, was ich bekomme ist eine 4kb grosse Datei - und nichts anderes.
So sieht bei mir der (leicht gaenderte) code aus:


...
                strCmd = strCmd + "Range: bytes=0-" + framesize + end;
                strCmd = strCmd + "Authorization: Basic " + stringfunctions.Base64_Encode(username + ":" + passwort) + end + end;
                //MessageBox.Show(strCmd);

                host = "http://" + newHost + ".rapidshare.com";
                MessageBox.Show(host + url);


                WebClient Client = new WebClient();
                System.Uri uri = new Uri(host + url);               
                Client.DownloadFile(uri, "test.rar");

Von Hand habe ich browser host + url runterladen koennen - also dort liegt der fehler schonmal nicht.. uebersehe ich da irgendwas?

zero_x Themenstarter:in
1.044 Beiträge seit 2008
vor 16 Jahren

Hallo Nachtwind,

Du hast wohl das selbe Problem wie ich 😉. Die 4KB große Datei ist der Quelltext von Rapidsahre. Genau diese Frage hab ich auch gestellt. Oder verstehe ich Dich falsch?

MfG,
Zero_x 😉

P.S.: An Nachtwind: Ich verwende auch ICQ 🙂.

N
118 Beiträge seit 2005
vor 16 Jahren

ouch, stimmt wohl - hab bei aller fehlersuche uebersehen, was genau runtergeladen wurde G

Das machts noch interessanter gruebel

Muss man evtl via Post den download der Daten beginnen? Wobei mich das wundern wuerde - wenn ich einen link einfach so eintippe erkennt man ja auch meinen Premiumaccount - was wohl an Cookies liegen duerfte kopfkratz
Ach was hab ich mir da nur wieder fuer ein Programm angefangen ><

zero_x Themenstarter:in
1.044 Beiträge seit 2008
vor 16 Jahren

Hallo Nachtwind,

um den Download zu starten muss man erst das Captcha posten und dann über den Session-Link den Download starten. Aber ist genau das Problem. Ich erhalte den Quelltext von Rapidshare! Ich will aber die Datei. Gibt es sowas wie einen Java-Script der gestartet werden muss, oder so etwas in der Art? Ob das mit den Cookies zusammenhängt?

MfG,
Zero_x 🙂

N
118 Beiträge seit 2005
vor 16 Jahren

naja, bei mir liegt das noch etwas anders - habe ja einen account und versuche dann so den captcha zu umgehen ;0)

im zweifelsfall ein browserfenster ansteuern ><

M
14 Beiträge seit 2007
vor 15 Jahren

mein fehler 😁 ich hätte vl. sagen sollen dass der src mit absicht eine nur 4kb große datei anfordert weil das skript ursprünglich dazu gedacht war um Files anzuladen damit sie nicht automatisch gelöscht werden. btw. nach dem 200 OK Request vom server wird ein octet-stream geöffnet der die datei runterlädt. also wird nicht der quellcode von rs geladen. man muss vorher noch die dateigröße ermitteln (BILD) und den post anpassen um die gesamte datei zu erhalten.

N
118 Beiträge seit 2005
vor 15 Jahren

        public bool loadFile(String newLink)
        {
            bool erg = true;
            if (newLink.IndexOf("Moved", 0) > 0)
            {
                String newHost = null;
                String end = "\r\n";
                String url;

                int pos1 = newLink.IndexOf("Location:");
                int pos2 = newLink.LastIndexOf(".rapidshare");
                newHost = newLink.Substring(pos1 + 17, pos2 - (pos1 + 17));
                int pos3 = newLink.IndexOf("/files/", 0);
                int pos4 = newLink.IndexOf("Content-Length:", 0);
                url = newLink.Substring(pos3, (pos4 - end.Length) - pos3);
                host = newHost + ".rapidshare.com";
                WebClient wc = new WebClient();
                wc.Headers.Add("Authorization", "Basic " +
                  Convert.ToBase64String(
                  Encoding.ASCII.GetBytes(username + ":" + passwort)));
                System.Uri uri = new Uri("http://" + host + url);
                wc.DownloadFileAsync(uri, "Test.rar");                    

            }
            else
            {
                erg = false;
            }
            return erg;
        }

Hier eine schnell zusammengehaemmerte Version um eine Datei runterladen zu koennen.
Leider fehlt noch jede Menge zeug (Dateigroesse...) - aber ein Anfang waer damit gemacht ;0)

Danke nochmal fuer den Urspruenglichen Code McLovin!

zero_x Themenstarter:in
1.044 Beiträge seit 2008
vor 15 Jahren

Hallo liebe Community,

ich verstehe nicht ganz! Ich hab doch ausdrücklich gesagt, dass ich als Freeuser das Proramm schreiben möchte X(.

MfG,
Zero_x 🙂

X
1.177 Beiträge seit 2006
vor 15 Jahren

Hallo lieber zero_x,

ich hab Dir doch auch schon einen Weg gewiesen. Benutze Doch einfach die ganzen Tips und Code-Stückchen. Ich glaube leider nicht, dass jemand Dir auf Anhieb sagen kann wass Du machen musst. Wir können nur Tips geben.

🙂

Xynratron

Herr, schmeiss Hirn vom Himmel - Autsch!

Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.

T
179 Beiträge seit 2007
vor 15 Jahren

es gibt auch einen einfacheren weg => reverse engeneering
nimm den .net reflector und schau dir mal das rs-downloadplugin von cryptload an ^^

zero_x Themenstarter:in
1.044 Beiträge seit 2008
vor 15 Jahren

Hallo t-master,

kann es sein, dass ich Dich zufällig aus dem Gulli:Bord kenne? Was ist ein .net reflector? 🤔

An Xynratron: Ja, aber sonst würde ich nicht fragen 😉.

MfG,
Zero_x 🙂

2.760 Beiträge seit 2006
vor 15 Jahren
M
14 Beiträge seit 2007
vor 15 Jahren

@zero. Warum gehst du an so ein Projekt und zeigst null Eigeniniative? Google kennst du anscheinend auch nicht. Weiß nicht wie es bei dir ist, trotz dass ich Schüler bin kaufe ich mir Fachliteratur und lese mich ein wenn das Internet nichts hergibt. Die Codes hier sollen dir den Weg zeigen und nicht für dich die Arbeit machen.

zero_x Themenstarter:in
1.044 Beiträge seit 2008
vor 15 Jahren

Hallo McLovin,

Warum gehst du an so ein Projekt und zeigst null Eigeniniative? Google kennst du anscheinend auch nicht.

Da verstehst du mich wohl falsch. Ich würde sonst nicht meine Frage hier im Forum so präzise, detailliert und ausführlich beschreiben! Mit Google habe ich mir den Codeschnipsel rausgesucht! Deinen Einwand verstehe ich absolut garnicht.

Nun, einige Fragen bleiben noch offen:*Wie ist es möglich folgende Probleme abzufangen(ähnl. wie eine Exception): *Wartezeit vor dem Download *Downloadsperre herausfinden *Ob Server kaputt/nich verfügbar ist *Captchabann: Zu oft Falsches Captcha eingegeben *...

*...

Gibt es eine Art Rückmeldung von Rapidshare die mich auf den Feler hinweiset? Oder muss ich die Inforationen aus dem Quelltext von Rapidshare entnehmen?

Ich würde mich sehr auf eure Hilfe freuen 😉.

MfG,
Zero_x 🙂

zero_x Themenstarter:in
1.044 Beiträge seit 2008
vor 15 Jahren

Hallo liebe Community,

hat keiner eine Antwort? push 😉

MfG
Zero_x

F
240 Beiträge seit 2006
vor 15 Jahren

Für alle Fragen: Quelltext parsen.

zero_x Themenstarter:in
1.044 Beiträge seit 2008
vor 15 Jahren

Hallo Femaref,

Für alle Fragen: Quelltext parsen.

gibt es eine Art Response-Klasse, die mir einen Vergleichswert oder mir ein Wort ausgibt? So wie eine Exception... Ich hoffe es ist verständlich formuliert 😉.

MfG
Zero_x 🙂

F
240 Beiträge seit 2006
vor 15 Jahren

Benutzt du immer noch die Methode aus deinem ersten Post? Wenn ja, haste doch einfach den responseStream als String, den musste dann analysieren. Zuerst selbst die Struktur analysieren, und dann aus den Schlüssen, die du ziehst etwaige Regexpattern oder ähnliches machen.