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 🤔
zero_x | <span style="font-size: 10;">my</span><span style="font-size: 10;">CSharp</span><span style="font-size: 10;">.de</span> - gemeinsam mehr erreichen
Für längere Zeit inaktiv.
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.
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 🙂
zero_x | <span style="font-size: 10;">my</span><span style="font-size: 10;">CSharp</span><span style="font-size: 10;">.de</span> - gemeinsam mehr erreichen
Für längere Zeit inaktiv.
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.
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
zero_x | <span style="font-size: 10;">my</span><span style="font-size: 10;">CSharp</span><span style="font-size: 10;">.de</span> - gemeinsam mehr erreichen
Für längere Zeit inaktiv.
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;
}
}
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 | <span style="font-size: 10;">my</span><span style="font-size: 10;">CSharp</span><span style="font-size: 10;">.de</span> - gemeinsam mehr erreichen
Für längere Zeit inaktiv.
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
zero_x | <span style="font-size: 10;">my</span><span style="font-size: 10;">CSharp</span><span style="font-size: 10;">.de</span> - gemeinsam mehr erreichen
Für längere Zeit inaktiv.
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...
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 🙂
zero_x | <span style="font-size: 10;">my</span><span style="font-size: 10;">CSharp</span><span style="font-size: 10;">.de</span> - gemeinsam mehr erreichen
Für längere Zeit inaktiv.
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.
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.
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 🙂
zero_x | <span style="font-size: 10;">my</span><span style="font-size: 10;">CSharp</span><span style="font-size: 10;">.de</span> - gemeinsam mehr erreichen
Für längere Zeit inaktiv.
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.
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 🙂
zero_x | <span style="font-size: 10;">my</span><span style="font-size: 10;">CSharp</span><span style="font-size: 10;">.de</span> - gemeinsam mehr erreichen
Für längere Zeit inaktiv.
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...
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)
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.
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?
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 🙂.
zero_x | <span style="font-size: 10;">my</span><span style="font-size: 10;">CSharp</span><span style="font-size: 10;">.de</span> - gemeinsam mehr erreichen
Für längere Zeit inaktiv.
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 ><
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 🙂
zero_x | <span style="font-size: 10;">my</span><span style="font-size: 10;">CSharp</span><span style="font-size: 10;">.de</span> - gemeinsam mehr erreichen
Für längere Zeit inaktiv.
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 ><
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.
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!
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 🙂
zero_x | <span style="font-size: 10;">my</span><span style="font-size: 10;">CSharp</span><span style="font-size: 10;">.de</span> - gemeinsam mehr erreichen
Für längere Zeit inaktiv.
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.
es gibt auch einen einfacheren weg => reverse engeneering
nimm den .net reflector und schau dir mal das rs-downloadplugin von cryptload an ^^
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 🙂
zero_x | <span style="font-size: 10;">my</span><span style="font-size: 10;">CSharp</span><span style="font-size: 10;">.de</span> - gemeinsam mehr erreichen
Für längere Zeit inaktiv.
Das ist ein Reflector: http://www.google.de/search?hl=de&q=Reflector&btnG=Google-Suche&meta=
@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.
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 | <span style="font-size: 10;">my</span><span style="font-size: 10;">CSharp</span><span style="font-size: 10;">.de</span> - gemeinsam mehr erreichen
Für längere Zeit inaktiv.
Hallo liebe Community,
hat keiner eine Antwort? push 😉
MfG
Zero_x
zero_x | <span style="font-size: 10;">my</span><span style="font-size: 10;">CSharp</span><span style="font-size: 10;">.de</span> - gemeinsam mehr erreichen
Für längere Zeit inaktiv.
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 🙂
zero_x | <span style="font-size: 10;">my</span><span style="font-size: 10;">CSharp</span><span style="font-size: 10;">.de</span> - gemeinsam mehr erreichen
Für längere Zeit inaktiv.
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.