Einfacher XML-RPC Server und Client

Code-Stücke können hier veröffentlicht werden.
Antworten
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Das hier sind Beispiele für einen sehr einfachen XMLRPC-Server und den dazu passenden XMLRPC-Client.

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
"""
Einfacher XMLRPC-Server
"""

from SimpleXMLRPCServer import SimpleXMLRPCServer
from random import randint

class XmlrpcHandler:
    def get_random_int(self, from_int, to_int):
        return randint(from_int, to_int)

server = SimpleXMLRPCServer(("localhost", 50505))
server.register_instance(XmlrpcHandler())
print "Der XMLRPC-Server horcht auf http://localhost:50505."
print "Er kann mit STRG+C beendet werden."
server.serve_forever()

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
"""
Einfacher XMLRPC-Client
"""

import socket
socket.setdefaulttimeout(3) # Timeout auf 3 sec. setzen
import xmlrpclib

server = xmlrpclib.ServerProxy("http://localhost:50505")
print server.get_random_int(1, 6)
Ein anderes Beispiel (auch mit clientseitiger Authentifizierung) findest du im Linux Magazin.

Siehe auch Einfacher Threading XML-RPC Server und Client.


mfg
Gerold
:-)

Edit: Timeout hinzugefügt

Suchworte: XML-RPC, HTTPXMLRPC, HTTP-XMLRPC
Zuletzt geändert von gerold am Sonntag 15. März 2009, 11:03, insgesamt 4-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Passt zum Thema:

xmlrpc server/client which does cookie handling and supports basic authentication --> http://aspn.activestate.com/ASPN/Cookbo ... ipe/501148

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
cyp++
User
Beiträge: 69
Registriert: Freitag 22. September 2006, 13:54

wie bekomme ich es dann hin, dass ich über's Internet auf den Server zugreifen kann? Hier mein gescheiterter Versuch:

Code: Alles auswählen

from SimpleXMLRPCServer import SimpleXMLRPCServer
from random import randint
import urllib

class XmlrpcHandler:
    def get_random_int(self, from_int, to_int):
        return randint(from_int, to_int)

host = urllib.urlopen('http://checkip.dyndns.org/').read()[76:-16]
server = SimpleXMLRPCServer((host, 50505))
server.register_instance(XmlrpcHandler())
print "Der XMLRPC-Server horcht auf http://%s:50505." % (host)
print "Er kann mit STRG+C beendet werden."
server.serve_forever()
"Can't assign requested adress"
Zuletzt geändert von cyp++ am Donnerstag 17. Mai 2007, 21:41, insgesamt 1-mal geändert.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

urllib.urlopen('http://checkip.dyndns.org/').read()[76:-16]
Hallo cyp++!

Kann es sein, dass dir damit nur die IP-Adresse deines Routers und nicht deines Computers zurück gegeben wird?

Taucht die von dieser Zeile zurück gegebene IP-Adresse auch in der Liste auf, wenn du in der Konsole ``ipconfig`` oder unter Linux ``ifconfig`` eingibst?

Nur dann kannst du dieser IP-Adresse auch von deinem Computer aus etwas zuweisen.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
cyp++
User
Beiträge: 69
Registriert: Freitag 22. September 2006, 13:54

nein, die IP die durch http://checkip.dyndns.org ermittelt wurde taucht nirgends auf unter ipconfig!
thelittlebug
User
Beiträge: 188
Registriert: Donnerstag 20. Juli 2006, 20:46
Wohnort: Wien
Kontaktdaten:

Ich kann mir nicht vorstellen, falls du einen Router hast, das ein zuweisen einer externen IP erfolgversprechend sein kann.

lg herby
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

cyp++ hat geschrieben:nein, die IP die durch http://checkip.dyndns.org ermittelt wurde taucht nirgends auf unter ipconfig!
Hallo cyp++!

Dann ist die Sache klar. Du benutzt also einen Router um ins Internet zu kommen und kein direkt an den Computer angeschlossenes Modem, richtig?

- Lasse das Serverprogramm auf "0.0.0.0" horchen. Damit horcht das Serverprogramm auf allen IP-Adressen des Computers.

- Schalte den Port 50505 in der Firewall frei, so dass man von Außen auch darauf zugreifen kann.

- Stelle deinen Router so ein, dass Anfragen an den Port 50505, die beim Router ankommen, an deinen Computer weitergeleitet werden.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten