[solved]Rapidshare API
-
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¶m1=value1¶m2=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.
-
wunderkind schrieb:
Client socket1((string)serverip,80); //... socket1.mRec(&buffer); cout<<buffer.c_str()<<endl; }
serverip
undbuffer
sind nirgendwo deklariert oder definiert. Was beinhaltetserverip
, von welchem Typ istbuffer
?
-
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..