|  | #!/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() |