blob: 29db1f359746e1d0986430014c47bc2cb6b08075 [file] [log] [blame]
# Copyright 2018 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Sharable functions for sending requests using http client."""
import json
def SendRequestToServer(url, http_client, post_data=None):
"""Sends GET/POST request to arbitrary url and returns response content.
Args:
url (str): The url to send the request to.
http_client (HttpClient): The httpclient object with which to make the
server calls.
post_data (dict): Data/params to send with the request, if any.
Returns:
content (dict), error (dict): the content from
the server and the last error encountered trying to retrieve it.
"""
error = None
headers = {}
if post_data:
post_data = json.dumps(post_data, sort_keys=True, separators=(',', ':'))
headers['Content-Type'] = 'application/json; charset=UTF-8'
headers['Content-Length'] = len(post_data)
if post_data:
status_code, content, _response_headers = http_client.Post(
url, post_data, headers=headers)
else:
status_code, content, _response_headers = http_client.Get(
url, headers=headers)
if status_code == 200:
# Also return the last error encountered to be handled in the calling
# code.
return content, error
else:
# The retry upon 50x (501 excluded) is automatically handled in the
# underlying http_client, which by default retries 5 times with
# exponential backoff.
return None, {
'code': status_code,
'message': 'Unexpected status code from http request'
}