def perform_request(self, request):
<EOL>if request.body:<EOL><INDENT>request.body = _get_data_bytes_or_stream_only('<STR_LIT>', request.body)<EOL><DEDENT>uri = self.protocol.lower() + '<STR_LIT>' + request.host + request.path<EOL>response = self.session.request(request.method,<EOL>uri,<EOL>params=request.query,<EOL>headers=request.headers,<EOL>data=request.body or None,<EOL>timeout=self.timeout,<EOL>proxies=self.proxies)<EOL>status = int(response.status_code)<EOL>response_headers = {}<EOL>for key, name in response.headers.items():<EOL><INDENT>if key.lower().startswith('<STR_LIT>'):<EOL><INDENT>response_headers[key] = name<EOL><DEDENT>else:<EOL><INDENT>response_headers[key.lower()] = name<EOL><DEDENT><DEDENT>wrap = HTTPResponse(status, response.reason, response_headers, response.content)<EOL>response.close()<EOL>return wrap<EOL>
Sends an HTTPRequest to Azure Storage and returns an HTTPResponse. If 
the response code indicates an error, raise an HTTPError.    

:param HTTPRequest request:
    The request to serialize and send.
:return: An HTTPResponse containing the parsed HTTP response.
:rtype: :class:`~._http.HTTPResponse`