Форум сайта python.su
Написал XMLRPC сервер
def onsevent(t):
print t
return ''
def onchangestateelements(s = {}):
print s
return ''
def server():
server = SimpleXMLRPCServer(("localhost", 8000),requestHandler=RequestHandler)
server.register_introspection_functions()
server.register_function(onsevent, 'ONRSEVENT')
server.register_function(onchangestateelements, 'ONCHANGESTATEELEMENTS')
# print help (server.encoding)
print 'Server start'
server.serve_forever()
class MyThread(threading.Thread):
def run(self):
server()
import xmlrpclib
s = xmlrpclib.ServerProxy('http://localhost:8000/xml-rpc')
# Print list of available methods
print s.system.listMethods()
print s.ONRSEVENT('ш')
Fault: <Fault 1: "<class 'xml.parsers.expat.ExpatError'>:not well-formed (invalid token): line 6, column 15">
Офлайн
переведите исходники в utf-8
Офлайн
Перевел нет эффекта дело в том что клиент посылает запрос в кодировке “Windows-1251” и если появляется русский символ то вылазит ошибка. Переводил кстати добавляя строку # -*- coding: utf-8 -*- первой в файле, пробовал также # -*- coding: Windows-1251 -*- тоже не помогло.
Пример запроса клиента:
<?xml version="1.0" encoding="Windows-1251" ?>
<methodCall>
<methodName>ONRSEVENT</methodName>
<params>
<param>
<value>
<struct>
<member>
<name>GUID</name>
<value><string>{18DE1E76-7F1B-4683-959B-94BEF5DE4439}</string></value>
</member>
<member>
<name>DATAEVENTS</name>
<value>
<struct>
<member>
<name>DATETIME</name>
<value><double>40611,4285416782</double></value>
</member>
<member>
<name>ADDRESS</name>
<value>
<struct>
<member>
<name>ADDRELEMENT</name>
<value><int>2</int></value>
</member>
<member>
<name>ADDRDEVICE</name>
<value><int>1</int></value>
</member>
<member>
<name>ADDRPULT</name>
<value><int>100</int></value>
</member>
<member>
<name>ADDRPORT</name>
<value><int>1</int></value>
</member>
</struct>
</value>
</member>
<member>
<name>TYPE</name>
<value><int>3</int></value>
</member>
<member>
<name>NAMETYPE</name>
<value><string>ШЛЕЙФ</string></value>
</member>
<member>
<name>EVENT</name>
<value><int>24</int></value>
</member>
<member>
<name>NAMEEVENT</name>
<value><string>Взятие зоны под охрану</string></value>
</member>
<member>
<name>TYPEEVENT</name>
<value><int>0</int></value>
</member>
<member>
<name>NAMETYPEEVENT</name>
<value><string>NEWEVENT</string></value>
</member>
</struct>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>
Отредактировано (Март 10, 2011 07:32:50)
Офлайн
Насколько помню, Python 2.7 умеет обрабатывать content encoding. Про другие версии с ходу ничего не скажу.
Офлайн
Перекодируйте сами, либо на основе значения encoding, либо если передается правильный Content-Type: text/xml;charset=windows-1251, то на основе charset.
Офлайн