Parse response content for HTTP errors when verbose is turned on

This commit is contained in:
Bas Stottelaar
2014-06-11 13:18:59 +02:00
parent e618103f38
commit 9a7300cda1

View File

@@ -45,10 +45,10 @@ def request_response(url, method="get", auto_raise=True, whitelist_status_code=N
return response return response
except requests.ConnectionError: except requests.ConnectionError:
logger.error("Unable to connect to remote host.") logger.error("Unable to connect to remote host. Check if the remote host is up and running.")
except requests.Timeout: except requests.Timeout:
logger.error("Request timed out.") logger.error("Request timed out. The remote host did not respeond timely.")
except requests.HTTPError, e: except requests.HTTPError as e:
if e.response is not None: if e.response is not None:
if e.response.status_code >= 500: if e.response.status_code >= 500:
cause = "remote server error" cause = "remote server error"
@@ -59,9 +59,27 @@ def request_response(url, method="get", auto_raise=True, whitelist_status_code=N
cause = "unknown" cause = "unknown"
logger.error("Request raise HTTP error with status code %d (%s).", e.response.status_code, cause) logger.error("Request raise HTTP error with status code %d (%s).", e.response.status_code, cause)
# Some servers return extra information in the result. Try to parse
# it for debugging purpose. Messages are limited to 100 characters,
# since it may return the whole page in case of normal web page URLs
if headphones.VERBOSE:
if e.response.headers.get('content-type') == 'text/html':
soup = BeautifulSoup(e.response.content, "html5lib")
message = soup.find("body")
message = message.text if message else soup.text
else:
message = e.response.content
# Truncate message if it is too long.
if len(message) > 100:
message = message[:100] + "..."
logger.debug("Server responded with message: %s", message)
else: else:
logger.error("Request raised HTTP error.") logger.error("Request raised HTTP error.")
except requests.RequestException, e: except requests.RequestException as e:
logger.error("Request raised exception: %s", e) logger.error("Request raised exception: %s", e)
def request_soup(url, **kwargs): def request_soup(url, **kwargs):