[solved]Rapidshare API



  • Ich wette du liest die Antwort irgendwie nicht richtig ein. Quasi ein Fehler im Empfangsteil.
    Ich hab gerade ein wenig via telnet mit der api rumgespielt und die antworten die rapidshare da liefert sind absolut nicht kompliziert aufgebaut (d.h. "Connection: close", kein chunked-encoding, etc.)

    Wenn überhaupt keine Antwort vom Server kommt also nichtmal nen "400 Bad Request", ist das entweder Absicht und du bist geblocked oder der Server erwartet dass du noch Daten sendest.
    Du hast also entweder die Anfrage nicht richtig verschickt (z.B. Rückgabewert von send() nicht beachtet) oder die Anfrage an sich ist irgendwo kaputt.



  • Ich wünschte es wäre so..ich find den Fehler einfach nicht..

    Ich schneide ja mit Wireshark den Netzwerkverkehr mit und leider kommt da nix,
    desweiteren funktioniert es ja mit anderen websites 😕



  • Hab gerade versehentliche editiert statt neu geposted:

    Wenn überhaupt keine Antwort vom Server kommt also nichtmal nen "400 Bad Request", ist das entweder Absicht und du bist geblocked oder der Server erwartet dass du noch Daten sendest.
    Du hast also entweder die Anfrage nicht richtig verschickt (z.B. Rückgabewert von send() nicht beachtet) oder die Anfrage an sich ist irgendwo kaputt (z.B. beliebt ist die fehlende leere Zeile, bei dir scheinbar nicht der Fall)



  • Du hast vermutlich zu viele Requests abgesetzt. Lies mal den oberen Kommentarblock der API, dort steht doch alles beschrieben. Und wieso willst du einen Request auf "subroutine" aufrufen? Das was du suchst ist "checkfiles_v1" welcher die Parameter "files" und "filenames" annimmt, näheres musst du in der API nachschauen.
    Den Cookie brauchst du nicht zum herunterladen von Dateien, das geht über Basic Auth.

    Gruß



  • geblocket bin ich nicht, da Anfragen über Browser funktionieren,
    der Rückgabewert stimmt auch mit der größe des gesendeten über ein,
    und die Anfrage ist eigentlich, weil ich dort auch den Fehler vermutet hatte,
    direkt aus dem Packet vom Browser kopiert.

    Ja ich weiss das das eine sinnlose Abfrage ist, jedoch ist das egal denn ich bekomme weder auf diese sinnlos, noch auf die sinnvolle eine antwort, bei der sinnlosen mpsste es ja

    ERROR: Invalid routine called.
    

    sein.Ist es aber nicht, daher ist was falsch.



  • Poste doch mal was wireshark konkret sagt was du sendest, wenn du schon keinen Code zeigen willst 😉



  • Wie ich in einem anderen Thread schon beschrieb, kann man die Fehlerursache gaz unten angehen: Du hast es mit einem Browser getestet, welcher genau diese Anfrage sendet, und er bekommt eine Antwort - nun probier's mal ueber Telnet. Wenn das funktioniert, ist definitiv etwas an deinem Programm nicht in Ordnung.

    Anfragen werden unter gleichen Voraussetzungen stets gleich behandelt und entsprechend beantwortet. Wenn du Unterschiede zwischen deinem Programm udn einem Browser erkennen kannst, sind die Voraussetzungen nicht gleich.

    Wenn du mal deinen Code zeigen koenntest, wuerden hier sicher einige den besagten Fehler auffinden koennen.



  • int main()
    {
    	string bsend 
    	= "GET /cgi-bin/rsapi.cgi?sub=subroutine&param1=value1&param2=value2 HTTP/1.1\r\n" 
       "Host: api.rapidshare.com\r\n" 
       "Connection: Keep-Alive\r\n" 
       "\r\n";
    	Client socket1((string)serverip,80);
    	cout<<endl<<socket1.mSend(bsend)<<endl;
    	socket1.mRec(&buffer);
    	cout<<buffer.c_str()<<endl;
    }
    
    int Client::mSend(string text){
    	return send(lhSocket,text.c_str(),text.length()+1,0);
    }
    

    Mir fällt gerade ein kleiner Unterschied auf:
    Wireshark:

    Data: 00
    

    Das steht als Data in meinem Paket, im Browserpaket ist garkein Inhalt.

    http://img3.imageshack.us/img3/7128/paketj.jpg



  • wunderkind schrieb:

    Client socket1((string)serverip,80);
    //...
    	socket1.mRec(&buffer);
    	cout<<buffer.c_str()<<endl;
    }
    

    serverip und buffer sind nirgendwo deklariert oder definiert. Was beinhaltet serverip , von welchem Typ ist buffer ?



  • Auch ist der Cast beim Konstruktor von Client sehr mysteriös. Du castest doch hoffentlich kein char * in einen std::string?



  • klöklöklö schrieb:

    Auch ist der Cast beim Konstruktor von Client sehr mysteriös. Du castest doch hoffentlich kein char * in einen std::string?

    Oder vice versa 🤡



  • Nene das is schon alles richtig.
    Das Problem war, das ich beim der Funktion mSend einen std:string übergeben habe,
    welcher ja bekanntlich mit \0 beendet wird. Das wurde dann eben auch mitgesendet,
    komischerweise kamen alle Websites damit klar außer rapidshare..


Anmelden zum Antworten