Python HttpClient for Thrift
Reviewed By: thrifty goodness for SMC
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665026 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/lib/py/src/transport/THttpClient.py b/lib/py/src/transport/THttpClient.py
new file mode 100644
index 0000000..7b39b63
--- /dev/null
+++ b/lib/py/src/transport/THttpClient.py
@@ -0,0 +1,51 @@
+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()
diff --git a/lib/py/src/transport/__init__.py b/lib/py/src/transport/__init__.py
index fb50c8b..b45e718 100644
--- a/lib/py/src/transport/__init__.py
+++ b/lib/py/src/transport/__init__.py
@@ -1 +1 @@
-__all__ = ["TTransport", "TSocket"]
+__all__ = ['TTransport', 'TSocket', 'THttpClient']