如何伪造Python中的soap响应?
发布时间:2020-12-20 11:18:37 所属栏目:Python 来源:网络整理
导读:我正在尝试测试公司产品中的功能.我们的软件将发出如下SOAP请求: 请求标题 POST /testfunction.php HTTP/1.1Accept: application/soap+xml,application/xml,text/xmlSOAPAction: "http://www.abc.com/testfunction#test"Host: soap.abc.comContent-Length:
我正在尝试测试公司产品中的功能.我们的软件将发出如下SOAP请求:
请求标题 POST /testfunction.php HTTP/1.1 Accept: application/soap+xml,application/xml,text/xml SOAPAction: "http://www.abc.com/testfunction#test" Host: soap.abc.com Content-Length: 461 Connection: Keep-Alive 请求内容 <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.abc.com/testfunction"> <SOAP-ENV:Body> <ns1:test> <productID>3</productID> <productSubID>1</productSubID> <version>1.0.1</version> <serialNumber/> <language>EN</language> <daysLicensed>0</daysLicensed> <daysLeft>0</daysLeft> </ns1:test> </SOAP-ENV:Body> </SOAP-ENV:Envelope> SOAP服务应该响应: 响应标题 HTTP/1.1 200 OK Server: nginx/0.7.67 Date: Mon,02 May 2011 13:43:46 GMT Content-Type: text/xml; charset=utf-8 Connection: keep-alive X-Powered-By: PHP/5.3.3-1ubuntu9.3 Content-Length: 304 Content-encoding: gzip 响应内容 <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.abc.com/testfunction"><SOAP-ENV:Body><ns1:testResponse><result>1000</result></ns1:testResponse></SOAP-ENV:Body></SOAP-ENV:Envelope> 一开始我以为我可以在web.py中创建一个Web服务,并在有人在http://www.abc.com/testfunction发出POST请求时返回相同的响应. import web url = ( '/testfunction','testfunction',) class testfunction: def POST(self): web.header('Content-Type','text/xml; charset=utf-8') return """<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.abc.com/testfunction"><SOAP-ENV:Body><ns1:testResponse><result>1000</result></ns1:testResponse></SOAP-ENV:Body></SOAP-ENV:Envelope> """ app = web.application(url,globals()) if __name__== "__main__": app.run() 但它没有用.我想这可能与标题有关.然后我尝试使用SimpleXMLRPCServer. from SimpleXMLRPCServer import SimpleXMLRPCServer,SimpleXMLRPCRequestHandler import xmlrpclib class MyRequestHandler(SimpleXMLRPCRequestHandler): rpc_paths = ('/',) def do_POST(self): return SimpleXMLRPCRequestHandler.do_POST(self) def test(): return "hello,world" server = SimpleXMLRPCServer( ("0.0.0.0",80),requestHandler = MyRequestHandler,) server.register_function(test,'test') server.serve_forever() 但问题是我不知道如何在标题中处理SOAPAction,而客户端在这里没有使用测试函数.谁能帮我?非常感谢!! 更新: 终于做到了,使用以下代码: from wsgiref.simple_server import WSGIServer,WSGIRequestHandler def echo(environ,start_response): status = "200 OK" headers = [("Content-type","text/xml")] start_response(status,headers) return ["""<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.abc.com/testfunction"><SOAP-ENV:Body><ns1:testResponse><result>1000</result></ns1:testResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>"""] httpd = WSGIServer(('0.0.0.0',WSGIRequestHandler) httpd.set_app(echo) httpd.serve_forever() 它应该与web.py代码一样,但web.py没有.从wireshark中捕获的包中,我在xml内容之前和之后发现了一些乱码(“3bc”和“0”),与编码有关? 解决方法
您可以使用
soaplib创建一个真正的SOAP服务,该服务实现您的接口并返回虚拟数据.这应该更容易维护,然后创建手写静态响应,并且代码不应该比基于web.py的示例更长.
这是Hello World example. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容