tapatalk xmlrpc request nimmt parameter nicht entgegen

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
pika
User
Beiträge: 3
Registriert: Mittwoch 25. Juni 2014, 09:01

hallo,

ich versuche mich an einem xml-rpc request mittels der von tapatalk bereitgestellten api.
dabei erhalte ich allgemeine infos zu meinem gewünschten forum sowie über die konfiguration problemlos mit get_forum bzw get_config. jetzt habe ich mich an einem login mit meinem user versucht. lt. der tapatalk api geschieht dies mit der funktion login und den 2 parametern für username und passwort. siehe https://tapatalk.com/api/api_section.php?id=2#login

Code: Alles auswählen

import xmlrpclib
import hashlib
import base64

s = xmlrpclib.ServerProxy('MEINFORUM')

username = base64.encodestring('USERNAME')

password = hashlib.md5()
password.update('PASSWORT')

print s.login(username, password.hexdigest())
bekomme beim aufruf aber eine fehlermeldung, obwohl mein erster parameter nicht als string sondern base64 kodiert übergeben wurde. laut tapatalk api müssen diese parameter vom datentyp byte[] sein.
xmlrpclib.Fault: <Fault 3: 'Incorrect parameters passed to method: Wanted base64, got string at param 1'>
from pokemon import *
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Ich habe zwar damit noch nicht gearbeitet, aber eigentlich muss man doch angeben, dass da ein Byte-String kommt, und zwar mit: xmlrpclib.Binary
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Hast Du eine Möglichkeit Dir das XML anzuschauen, das Du an den Server sendest? Ich finde sowas sehr hilfreich beim Entwickeln und Debuggen.

Der SOAPMonitor von Apache Axis ist unkompliziert in der Bedienung:
http://axis.apache.org/axis/java/soapmo ... guide.html

Mit dem SOAPMonitor siehst Du das XML, das Du sendest und Du kannst das XML sogar manuell bearbeiten bevor es gesendet wird. So kannst Du erstmal ausprobieren, wie das XML aussehen soll, damit der Server das Gewünschte tut und erst danach den Client dazu bringen, das Gewünschte zu erzeugen.
a fool with a tool is still a fool, www.magben.de, YouTube
Benutzeravatar
pika
User
Beiträge: 3
Registriert: Mittwoch 25. Juni 2014, 09:01

sparrow hat geschrieben:Ich habe zwar damit noch nicht gearbeitet, aber eigentlich muss man doch angeben, dass da ein Byte-String kommt, und zwar mit: xmlrpclib.Binary
Danke, das ist es gewesen. Der funktionierende Code schaut nun wie folgt aus:

Code: Alles auswählen

from pprint import pprint as pretty
import xmlrpclib as xmlrpc
import hashlib
import base64

server = xmlrpc.ServerProxy('*****')

hash = hashlib.md5('*****')
hash = hash.hexdigest()

username = xmlrpc.Binary('*****')
password = xmlrpc.Binary(hash)

# pretty(s.get_config())
# pretty(s.get_forum(True))

login = server.login(username, password)
print pretty(login)
:D
from pokemon import *
Antworten