summaryrefslogtreecommitdiff
path: root/freebase-api/freebase/api/httpclients.py
diff options
context:
space:
mode:
Diffstat (limited to 'freebase-api/freebase/api/httpclients.py')
-rw-r--r--freebase-api/freebase/api/httpclients.py82
1 files changed, 82 insertions, 0 deletions
diff --git a/freebase-api/freebase/api/httpclients.py b/freebase-api/freebase/api/httpclients.py
new file mode 100644
index 0000000..c2b10b2
--- /dev/null
+++ b/freebase-api/freebase/api/httpclients.py
@@ -0,0 +1,82 @@
+try:
+ from google.appengine.api import urlfetch
+ from cookie_handlers import CookiefulUrlfetch
+except:
+ pass
+
+try:
+ import httplib2
+ from cookie_handlers import CookiefulHttp
+except:
+ pass
+
+try:
+ import urllib2
+except:
+ pass
+
+class Urllib2Client(object):
+ def __init__(self, cookiejar):
+ cookiespy = urllib2.HTTPCookieProcessor(cookiejar)
+ self.opener = urllib2.build_opener(cookiespy)
+
+ def __call__(self, url, method, body, headers):
+ req = urllib2.Request(url, body, headers)
+
+ try:
+ resp = self.opener.open(req)
+
+ except socket.error, e:
+ self.log.error('SOCKET FAILURE: %s', e.fp.read())
+ raise MetawebError, 'failed contacting %s: %s' % (url, str(e))
+
+ except urllib2.HTTPError, e:
+ self._raise_service_error(url, e.code, e.info().type, e.fp.read())
+
+ for header in resp.info().headers:
+ self.log.debug('HTTP HEADER %s', header)
+ name, value = re.split("[:\n\r]", header, 1)
+ if name.lower() == 'x-metaweb-tid':
+ self.tid = value.strip()
+
+ return (resp, resp.read())
+
+class Httplib2Client(object):
+ def __init__(self, cookiejar):
+ self.cookiejar = cookiejar
+ self.httpclient = CookiefulHttp(cookiejar=self.cookiejar)
+
+ def __call__(self, url, method, body, headers):
+ try:
+ resp, content = self.httpclient.request(url, method=method,
+ body=body, headers=headers)
+ if (resp.status != 200):
+ self._raise_service_error(url, resp.status, resp['content-type'], content)
+
+ except socket.error, e:
+ self.log.error('SOCKET FAILURE: %s', e.fp.read())
+ raise MetawebError, 'failed contacting %s: %s' % (url, str(e))
+
+ except httplib2.HttpLib2ErrorWithResponse, e:
+ self._raise_service_error(url, resp.status, resp['content-type'], content)
+ except httplib2.HttpLib2Error, e:
+ raise MetawebError(u'HTTP error: %s' % (e,))
+
+ #tid = resp.get('x-metaweb-tid', None)
+
+ return (resp, content)
+
+
+class UrlfetchClient(object):
+ def __init__(self, cookiejar):
+ self.cookiejar = cookiejar
+ self.httpclient = CookiefulUrlfetch(cookiejar=self.cookiejar)
+
+ def __call__(self, url, method, body, headers):
+ resp = self.httpclient.request(url, payload=body, method=method, headers=headers)
+
+ if resp.status_code != 200:
+ self._raise_service_error(url, resp.status_code, resp.headers['content-type'], resp.body)
+
+ return (resp, resp.content)
+