Python 将 http post 正文扭曲转发到 tcp 端口

Python twisted forward http post body to tcp port

我在本地主机的 9999 端口有一个回显服务器 运行。我正在使用 twisted 开发一个网络服务器(我是 twisted 的新手,一般来说 python)。客户端将使用 HTTP 的分块编码流式传输数据。我希望服务器做的是将此数据发送到端口 9999 并从那里获取响应并作为 http 响应写回。但我什至不能让发送部分工作。这是我到目前为止所做的。

来自 twisted.web 导入服务器、资源
来自 twisted.internet 导入反应器、端点
来自 twisted.internet.protocol import Protocol, Factory

class Clientp(协议):
    def __init__(self, req):
        self.req = 要求

    def connectionMade(自我):
        self.transport.writeSequence(self.req.content.read())

    def dataReceived(自我,数据):
        print ("+ 收到回复" + str(data))
        # 我必须在这里通过响应发送数据

class 计数器(resource.Resource):
    isLeaf = 真
    请求数 = 0

    def render_POST(自我,请求):
        定义客户端协议():
            return 客户端p(请求)
        endpoint = endpoints.TCP4ClientEndpoint(reactor, "127.0.0.1", 9999)
        endpoint.connect(Factory.forProtocol(客户端协议))
        return server.NOT_DONE_YET

endpoints.serverFromString(反应器, "tcp:8000").listen(server.Site(Counter()))
reactor.run()

我无法将 post 内容 (request.content.read()) 写入 TCP 端点。我收到 TypeError("Data must be bytes") 错误。有什么想法

def connectionMade(self):
    self.transport.writeSequence(self.req.content.read())

ITransport.writeSequence accepts an iterable of bytes. IRequest.content.read returns 字节对象。

您收到错误 TypeError("Data must be bytes"),因为 迭代 Python 3 中的字节得到整数。实现所抱怨的正是这些整数。

您应该只使用 ITransport.write