|
@@ -1089,12 +1089,11 @@ def image_proxy():
|
|
'DNT': '1',
|
|
'DNT': '1',
|
|
}
|
|
}
|
|
set_context_network_name('image_proxy')
|
|
set_context_network_name('image_proxy')
|
|
- stream = http_stream(
|
|
|
|
|
|
+ resp, stream = http_stream(
|
|
method = 'GET',
|
|
method = 'GET',
|
|
url = url,
|
|
url = url,
|
|
headers = request_headers
|
|
headers = request_headers
|
|
)
|
|
)
|
|
- resp = next(stream)
|
|
|
|
content_length = resp.headers.get('Content-Length')
|
|
content_length = resp.headers.get('Content-Length')
|
|
if (content_length
|
|
if (content_length
|
|
and content_length.isdigit()
|
|
and content_length.isdigit()
|
|
@@ -1124,22 +1123,29 @@ def image_proxy():
|
|
except httpx.HTTPError:
|
|
except httpx.HTTPError:
|
|
logger.exception('HTTP error on closing')
|
|
logger.exception('HTTP error on closing')
|
|
|
|
|
|
|
|
+ def close_stream():
|
|
|
|
+ nonlocal resp, stream
|
|
|
|
+ try:
|
|
|
|
+ resp.close()
|
|
|
|
+ del resp
|
|
|
|
+ del stream
|
|
|
|
+ except httpx.HTTPError as e:
|
|
|
|
+ logger.debug('Exception while closing response', e)
|
|
|
|
+
|
|
try:
|
|
try:
|
|
headers = dict_subset(
|
|
headers = dict_subset(
|
|
resp.headers,
|
|
resp.headers,
|
|
{'Content-Type', 'Content-Encoding', 'Content-Length', 'Length'}
|
|
{'Content-Type', 'Content-Encoding', 'Content-Length', 'Length'}
|
|
)
|
|
)
|
|
-
|
|
|
|
- def forward_chunk():
|
|
|
|
- total_length = 0
|
|
|
|
- for chunk in stream:
|
|
|
|
- total_length += len(chunk)
|
|
|
|
- if total_length > maximum_size:
|
|
|
|
- break
|
|
|
|
- yield chunk
|
|
|
|
-
|
|
|
|
- return Response(forward_chunk(), mimetype=resp.headers['Content-Type'], headers=headers)
|
|
|
|
|
|
+ response = Response(
|
|
|
|
+ stream,
|
|
|
|
+ mimetype=resp.headers['Content-Type'],
|
|
|
|
+ headers=headers,
|
|
|
|
+ direct_passthrough=True)
|
|
|
|
+ response.call_on_close(close_stream)
|
|
|
|
+ return response
|
|
except httpx.HTTPError:
|
|
except httpx.HTTPError:
|
|
|
|
+ close_stream()
|
|
return '', 400
|
|
return '', 400
|
|
|
|
|
|
|
|
|