59 lines
1.3 KiB
Python
59 lines
1.3 KiB
Python
#!/usr/bin/env python
|
|
#
|
|
# Copyright (c) 2006- Facebook
|
|
# Distributed under the Thrift Software License
|
|
#
|
|
# See accompanying file LICENSE or visit the Thrift site at:
|
|
# http://developers.facebook.com/thrift/
|
|
|
|
from TTransport import *
|
|
from cStringIO import StringIO
|
|
|
|
import httplib
|
|
|
|
class THttpClient(TTransportBase):
|
|
|
|
"""Http implementation of TTransport base."""
|
|
|
|
def __init__(self, host, port, uri):
|
|
self.host = host
|
|
self.port = port
|
|
self.uri = uri
|
|
self.__wbuf = StringIO()
|
|
self.__http = None
|
|
|
|
def open(self):
|
|
self.__http = httplib.HTTP(self.host, self.port)
|
|
|
|
def close(self):
|
|
self.__http.close()
|
|
self.__http = None
|
|
|
|
def isOpen(self):
|
|
return self.__http != None
|
|
|
|
def read(self, sz):
|
|
return self.__http.file.read(sz)
|
|
|
|
def write(self, buf):
|
|
self.__wbuf.write(buf)
|
|
|
|
def flush(self):
|
|
# Pull data out of buffer
|
|
data = self.__wbuf.getvalue()
|
|
self.__wbuf = StringIO()
|
|
|
|
# HTTP request
|
|
self.__http.putrequest('POST', self.uri)
|
|
|
|
# Write headers
|
|
self.__http.putheader('Host', self.host)
|
|
self.__http.putheader('Content-Type', 'application/x-thrift')
|
|
self.__http.putheader('Content-Length', str(len(data)))
|
|
self.__http.endheaders()
|
|
|
|
# Write payload
|
|
self.__http.send(data)
|
|
|
|
# Get reply to flush the request
|
|
self.code, self.message, self.headers = self.__http.getreply()
|