我已经编写了一个简单的 http 服务器和 http 客户端代码,我能够成功地从客户端以 xml 的形式向服务器发送消息。这是我的代码。
客户端.py
from StringIO import StringIO
from twisted.internet import reactor
from twisted.web.client import Agent
from twisted.web.http_headers import Headers
from twisted.web.client import FileBodyProducer
from xml_dict import bm_xml
xml_str = bm_xml()
agent = Agent(reactor)
body = FileBodyProducer(StringIO(xml_str))
d = agent.request(
'GET',
'http://localhost:8080/',
Headers({'User-Agent': ['Replication'],
'Content-Type': ['text/x-greeting']}),
body)
def cbResponse(response):
print response.version
d.addCallback(cbResponse)
def cbShutdown(ignored):
reactor.stop()
d.addBoth(cbShutdown)
reactor.run()
服务器.py
from twisted.web import server, resource
from twisted.internet import reactor
def parse_xml(xml_str):
print xml_str
response = "xml_to_client"
return response
class Simple(resource.Resource):
isLeaf = True
def render_GET(self, request):
xml_request_str = request.content.read()
response = parse_xml(xml_request_str)
print response
site = server.Site(Simple())
reactor.listenTCP(8080, site)
reactor.run()
我在这里要做的是从客户端发送一个xml字符串到服务器,xml是从另一个文件的bm_xml模块生成的。此 xml 已成功读取到服务器,现在一旦服务器接收到 xml,我需要解析此 xml 并返回另一个 xml 字符串。我有解析 xml 并构造另一个 xml 的代码,以便客户端从服务器接收这个 xml,但我不知道如何将消息从服务器发送到客户端。在服务器或客户端中所需的所有更改在哪里?我假设cbresponse
必须在客户端进行更改,但我不知道应该在服务器端进行更改。在服务器response
变量中是我需要发送给客户端的变量。