pysimplesoap実現soap web api

2360 ワード

server.py
from pysimplesoap.server import SoapDispatcher, SOAPHandler
from BaseHTTPServer import HTTPServer
import base64
import cv2
from frvehiclelpr import *
import sys
import json

lpr = 0

def analyseImg(data, fileFormat):
    s = base64.b64decode(data)
    fileName = "test1." + fileFormat
    fileName = str(fileName)
    f = open(fileName, 'wb')
    f.write(s)
    f.flush()
    f.close()
    
    res = lpr.recognizeFile(fileName)
    res['platenum'] = res['platenum'].decode('gb2312')
    #print res['platenum']
    jstr = json.dumps(res)
    bstr = base64.b64encode(jstr)
    return bstr

if __name__ == '__main__':
    lpr = FrVehicleLpr()
    res = lpr.init()
    if not res:
        print "init lpr failed !"
        sys.exit(0)
    
    dispatcher = SoapDispatcher(
    'my_dispatcher',
    location = "http://localhost:8008/",
    action = 'http://localhost:8008/',
    namespace = "http://example.com/sample.wsdl", prefix="ns0",
    trace = True,
    ns = True)
    
    dispatcher.register_function('AnalyseImg', analyseImg,
    returns={'analyseResult': str}, 
    args={'data': str, 'fileFormat': str})

    print "Starting server..."
    httpd = HTTPServer(("", 8008), SOAPHandler)
    httpd.dispatcher = dispatcher
    httpd.serve_forever()






client.py
from pysimplesoap.client import SoapClient,SoapFault
import base64
import json

class FrClient(object):
    def __init__(self):
        self.client = 0
    def init(self, add = 0):
        if add == 0:
            self.client = SoapClient(wsdl="http://localhost:8008")
        else:
            self.client = SoapClient(wsdl=add)
    def analyseImg(self, srcName, formatName = 0):
        f = open(srcName, 'rb')
        s = f.read()
        d = base64.b64encode(s)
        f.close()
        if formatName == 0:
            formatName = srcName[len(srcName)-3:]
        response = self.client.AnalyseImg(data = d,fileFormat = formatName)
        dres = response['analyseResult']
        jres = base64.b64decode(dres)
        res = json.loads(jres)
        return res
                
if __name__ == '__main__':
    pass