From 13ea5baee5d490a703b0ebf6efd37719b397875c Mon Sep 17 00:00:00 2001 From: Sebastian Nagel Date: Tue, 27 Apr 2021 05:35:28 +0200 Subject: [PATCH] FrontendApp: forward HTTP status of CDX backend (#624) * FrontendApp: forward HTTP status of CDX backend to allow clients to handle errors more easily * WarcServer: keep the HTTP status lines short - append the exception message only if the status isn't a string (WbException and inherited classes already have nice status string) - avoid overlong status lines, eg. HTTP/1.1 404 Not Found No Captures found for: https://very-long.url/... --- pywb/apps/frontendapp.py | 4 +++- pywb/warcserver/basewarcserver.py | 5 ++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/pywb/apps/frontendapp.py b/pywb/apps/frontendapp.py index c3ece294..69382df2 100644 --- a/pywb/apps/frontendapp.py +++ b/pywb/apps/frontendapp.py @@ -404,10 +404,12 @@ class FrontEndApp(object): try: res = requests.get(cdx_url, stream=True) + status_line = '{} {}'.format(res.status_code, res.reason) content_type = res.headers.get('Content-Type') return WbResponse.bin_stream(StreamIter(res.raw), - content_type=content_type) + content_type=content_type, + status=status_line) except Exception as e: return WbResponse.text_response('Error: ' + str(e), status='400 Bad Request') diff --git a/pywb/warcserver/basewarcserver.py b/pywb/warcserver/basewarcserver.py index 0ef5f448..f1d6b01b 100644 --- a/pywb/warcserver/basewarcserver.py +++ b/pywb/warcserver/basewarcserver.py @@ -141,6 +141,9 @@ class BaseWarcServer(object): out_headers['ResErrors'] = res[0] message = message.encode('utf-8') - message = str(status) + ' ' + message + if isinstance(status, str): + message = status + else: + message = str(status) + ' ' + message start_response(message, list(out_headers.items())) return res