You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Jeffrey Tolar (Jira)" <ji...@apache.org> on 2021/10/01 21:53:00 UTC
[jira] [Created] (THRIFT-5467) python: CannotSendHeader exception
with 0.15
Jeffrey Tolar created THRIFT-5467:
-------------------------------------
Summary: python: CannotSendHeader exception with 0.15
Key: THRIFT-5467
URL: https://issues.apache.org/jira/browse/THRIFT-5467
Project: Thrift
Issue Type: Bug
Components: Python - Library
Affects Versions: 0.15.0
Reporter: Jeffrey Tolar
We recently started using thrift 0.15.0 after it was pushed to PyPI last week; previously, we were using 0.13.
Since then, we've been receiving the following exception:
{noformat}
# /tmp/thrift-error/bin/python test.py
Traceback (most recent call last):
File "test.py", line 16, in <module>
transport.flush()
File "/tmp/thrift-error/lib/python3.8/site-packages/thrift/transport/THttpClient.py", line 191, in flush
self.__http.putheader('Cookie', self.headers['Set-Cookie'])
File "/opt/python/lib/python3.8/http/client.py", line 1217, in putheader
raise CannotSendHeader()
http.client.CannotSendHeader
{noformat}
Here's the {{test.py}}:
{noformat:title=test.py}
import thrift.transport.THttpClient
URL = 'https://....'
CA_FILE = '...'
CERT_FILE = '...'
KEY_FILE = '...'
transport = thrift.transport.THttpClient.THttpClient(
uri_or_host=URL,
cafile=CA_FILE,
cert_file=CERT_FILE,
key_file=KEY_FILE
)
transport.flush()
{noformat}
This appears to be a regression from THRIFT-5165 and https://github.com/apache/thrift/pull/2086.
Based on [the python source for {{http.client}}|https://github.com/python/cpython/blob/a450398933d265011e1e8eae7f771b70f97945fb/Lib/http/client.py#L1237-L1238], {{HTTPConnection.putheader}} can only be called after a request has been started, and before it's been sent. (There's a state diagram at the top of that file).
The [current {{THttpClient.py}}|https://github.com/apache/thrift/blob/cb808fcb79d03028c6138891381689e1ef4e4a94/lib/py/src/transport/THttpClient.py#L191] calls {{HTTPConnection.putheader('Cookie', ...)}} after reading the response (and before it starts another request) - based on the code for both projects, it looks like if the server returns a {{Set-Cookie}} header, the client will always fail with the {{CannotSendHeader}} exception.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)