# HG changeset patch # User Thierry Florac # Date 1332514357 -3600 # Node ID 953f5b5bddb61cadd0189f2b76c54757aa95306e # Parent e88a6168a90ea3637d31789556f5c5079a6b2fef Added HTTP client class diff -r e88a6168a90e -r 953f5b5bddb6 ztfy/utils/protocol/http.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ztfy/utils/protocol/http.py Fri Mar 23 15:52:37 2012 +0100 @@ -0,0 +1,76 @@ +### -*- coding: utf-8 -*- #################################################### +############################################################################## +# +# Copyright (c) 2012 Thierry Florac +# All Rights Reserved. +# +# This software is subject to the provisions of the Zope Public License, +# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. +# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED +# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS +# FOR A PARTICULAR PURPOSE. +# +############################################################################## + + +# import standard packages +import httplib2 +import urllib + +# import Zope3 interfaces + +# import local interfaces + +# import Zope3 packages + +# import local packages + + +class HTTPClient(object): + """HTTP client""" + + def __init__(self, method, protocol, servername, url, params={}, credentials=(), + proxy=(), rdns=True, proxy_auth=(), timeout=None, headers={}): + """Intialize HTTP connection""" + self.connection = None + self.method = method + self.protocol = protocol + self.servername = servername + self.url = url + self.params = params + self.location = None + self.credentials = credentials + self.proxy = proxy + self.rdns = rdns + self.proxy_auth = proxy_auth + self.timeout = timeout + self.headers = headers + if 'User-Agent' not in headers: + self.headers['User-Agent'] = 'ZTFY HTTP Client/1.0' + + def getResponse(self): + """Common HTTP request""" + if self.proxy: + proxy_info = httplib2.ProxyInfo(httplib2.socks.PROXY_TYPE_HTTP, + proxy_host=self.proxy[0], + proxy_port=self.proxy[1], + proxy_rdns=self.rdns, + proxy_user=self.proxy_auth and self.proxy_auth[0] or None, + proxy_pass=self.proxy_auth and self.proxy_auth[1] or None) + proxy_info = None + else: + proxy_info = None + http = httplib2.Http(timeout=self.timeout, proxy_info=proxy_info) + if self.credentials: + http.add_credentials(self.credentials[0], self.credentials[1]) + uri = '%s://%s%s' % (self.protocol, self.servername, self.url) + if self.params: + uri += '?' + urllib.urlencode(self.params) + response, content = http.request(uri, self.method, headers=self.headers) + return response, content + + +def getClient(method, protocol, servername, url, params={}, credentials=(), proxy=(), rdns=True, proxy_auth=(), timeout=None, headers={}): + """HTTP client factory""" + return HTTPClient(method, protocol, servername, url, params, credentials, proxy, rdns, proxy_auth, timeout, headers)