misc: switch http support to requests library (#19437)

This commit is contained in:
Frédéric Péters 2017-11-14 23:18:55 +04:00
parent e06b74f755
commit 218bc1063b
5 changed files with 15 additions and 39 deletions

1
debian/control vendored
View File

@ -16,6 +16,7 @@ Depends: ${misc:Depends}, ${python:Depends},
graphviz,
python-feedparser,
python-imaging,
python-requests,
python-vobject,
uwsgi,
uwsgi-plugin-python

View File

@ -272,9 +272,6 @@ class HttpRequestsMocking(object):
self.headers = headers or {}
self.length = len(data or '')
def getheader(self, header):
return self.headers.get(header, None)
if status is None:
raise ConnectionError('error')
return FakeResponse(status, data, headers), status, data, None

View File

@ -20,10 +20,7 @@ import calendar
import re
import os
import time
import httplib
import urllib
import socket
import ssl
import base64
import json
import subprocess
@ -31,6 +28,8 @@ import tempfile
import unicodedata
import hashlib
import requests
try:
from PIL import Image
except ImportError:
@ -277,6 +276,7 @@ def _http_request(url, method='GET', body=None, headers={}, cert_file=None, time
else:
hostname, query = urllib.splithost(url[6:])
auth = None
if '@' in hostname:
authenticator, hostname = hostname.split('@')
if ':' in authenticator:
@ -284,39 +284,19 @@ def _http_request(url, method='GET', body=None, headers={}, cert_file=None, time
else:
username = authenticator
password = ''
headers['Authorization'] = 'Basic %s' % base64.b64encode('%s:%s' % (username, password))
connection_kwargs = {'host': hostname}
if timeout:
connection_kwargs['timeout'] = timeout
if cert_file:
connection_kwargs['cert_file'] = cert_file
if url.startswith('http://'):
conn = httplib.HTTPConnection(**connection_kwargs)
else: # https
conn = httplib.HTTPSConnection(**connection_kwargs)
query = query.replace('&', '&')
auth = (username, password)
try:
conn.request(method, query, body, headers)
response = conn.getresponse()
except socket.gaierror, (err, msg):
conn.close()
raise ConnectionError('error while connecting to %s (%s)' % (hostname, msg))
except socket.timeout, err:
conn.close()
response = requests.request(method, url, headers=headers, data=body,
timeout=timeout, cert=cert_file)
except requests.Timeout:
raise ConnectionError('connection timed out while fetching the page')
except socket.error, err:
conn.close()
raise ConnectionError('error while fetching the page (%s)' % err)
except ssl.CertificateError, err:
conn.close()
raise ConnectionError('certificate error when connecting (%s)' % err)
except requests.RequestException as err:
raise ConnectionError('error in http request to to %s (%s)' % (hostname, err))
else:
data = response.read()
status = response.status
auth_header = response.getheader('WWW-Authenticate')
conn.close()
data = response.content
status = response.status_code
auth_header = response.headers.get('WWW-Authenticate')
return response, status, data, auth_header

View File

@ -15,8 +15,6 @@
# along with this program; if not, see <http://www.gnu.org/licenses/>.
import os
import httplib
import urllib
import urlparse
import time
import sys

View File

@ -275,7 +275,7 @@ class WebserviceCallStatusItem(WorkflowStatusItem):
return
app_error_code = 0
app_error_code_header = response.getheader('x-error-code')
app_error_code_header = response.headers.get('x-error-code')
if app_error_code_header:
# result is good only if header value is '0'
try:
@ -337,7 +337,7 @@ class WebserviceCallStatusItem(WorkflowStatusItem):
elif d.get('display_id'):
formdata.id_display = d.get('display_id')
else: # store result as attachment
content_type = response.getheader('content-type') or ''
content_type = response.headers.get('content-type') or ''
if content_type:
content_type = content_type.split(';')[0].strip().lower()
workflow_data['%s_content_type' % self.varname] = content_type