diff --git a/setup.py b/setup.py index 629ed64..17e03c4 100755 --- a/setup.py +++ b/setup.py @@ -40,7 +40,7 @@ except: setuptools.setup( name='warcprox', - version='2.4b2.dev159', + version='2.4b2.dev160', description='WARC writing MITM HTTP/S proxy', url='https://github.com/internetarchive/warcprox', author='Noah Levitt', diff --git a/warcprox/mitmproxy.py b/warcprox/mitmproxy.py index 8778822..fdcd8a1 100644 --- a/warcprox/mitmproxy.py +++ b/warcprox/mitmproxy.py @@ -390,6 +390,28 @@ class MitmProxyHandler(http_server.BaseHTTPRequestHandler): self.send_error(502, str(e)) return + def send_error(self, code, message=None, explain=None): + # BaseHTTPRequestHandler.send_response_only() in http/server.py + # does this: + # if not hasattr(self, '_headers_buffer'): + # self._headers_buffer = [] + # but we sometimes see self._headers_buffer == None + # (This happened before! see commit dc9fdc34125dd2357) + # Workaround: + if hasattr(self, '_headers_buffer') and not self._headers_buffer: + self._headers_buffer = [] + try: + return http_server.BaseHTTPRequestHandler.send_error( + self, code, message, explain) + except: + self.logger.error( + '''WTF: self=%r hasattr(self,'_headers_buffer')=%r''', + self, hasattr(self,'_headers_buffer')) + if hasattr(self,'_headers_buffer'): + self.logger.error( + 'WTF: self._headers_buffer=%r', self._headers_buffer) + return None + def _proxy_request(self, extra_response_headers={}): ''' Sends the request to the remote server, then uses a ProxyingRecorder to