When using string enums as key values for the headers dict parameter with requests.get() function in v2.28.0 it raises an InvalidHeader error but using previous version v2.27.1 works well without any error. It seems there was an unexpected breaking change with that release.
Expected Result
Dict keys for the headers parameter when using requests.get() are still valid if a string enum is used.
Actual Result
Instead it raises an InvalidHeader error stating that:
Header must be of type str or bytes, not enum.
Traceback (most recent call last):
File "/home/yair/PycharmProjects/tests/requests_error.py", line 9, in <module>
requests.get("http://URL", headers={CustomEnum.TRACE_ID: "90e85293-afd1-4b48-adf0-fa6daf02359e"})
File "/home/yair/.local/lib/python3.8/site-packages/requests/api.py", line 73, in get
return request("get", url, params=params, **kwargs)
File "/home/yair/.local/lib/python3.8/site-packages/requests/api.py", line 59, in request
return session.request(method=method, url=url, **kwargs)
File "/home/yair/.local/lib/python3.8/site-packages/requests/sessions.py", line 573, in request
prep = self.prepare_request(req)
File "/home/yair/.local/lib/python3.8/site-packages/requests/sessions.py", line 484, in prepare_request
p.prepare(
File "/home/yair/.local/lib/python3.8/site-packages/requests/models.py", line 369, in prepare
self.prepare_headers(headers)
File "/home/yair/.local/lib/python3.8/site-packages/requests/models.py", line 491, in prepare_headers
check_header_validity(header)
File "/home/yair/.local/lib/python3.8/site-packages/requests/utils.py", line 1037, in check_header_validity
raise InvalidHeader(
requests.exceptions.InvalidHeader: Header part (<CustomEnum.TRACE_ID: 'X-B3-TraceId'>) from {<CustomEnum.TRACE_ID: 'X-B3-TraceId'>: '90e85293-afd1-4b48-adf0-fa6daf02359e'} must be of type str or bytes, not <enum 'CustomEnum'>
Reproduction Steps
from enum import Enum
import requests
class CustomEnum(str, Enum):
TRACE_ID = "X-B3-TraceId"
requests.get("http://URL", headers={CustomEnum.TRACE_ID: "90e85293-afd1-4b48-adf0-fa6daf02359e"})
System Information
$ python -m requests.help
{
"chardet": {
"version": "3.0.4"
},
"charset_normalizer": {
"version": "2.0.4"
},
"cryptography": {
"version": "2.8"
},
"idna": {
"version": "3.2"
},
"implementation": {
"name": "CPython",
"version": "3.8.10"
},
"platform": {
"release": "5.13.0-48-generic",
"system": "Linux"
},
"pyOpenSSL": {
"openssl_version": "1010106f",
"version": "19.0.0"
},
"requests": {
"version": "2.28.0"
},
"system_ssl": {
"version": "1010106f"
},
"urllib3": {
"version": "1.26.6"
},
"using_charset_normalizer": false,
"using_pyopenssl": true
}
When using string enums as key values for the
headersdict parameter withrequests.get()function inv2.28.0it raises anInvalidHeadererror but using previous versionv2.27.1works well without any error. It seems there was an unexpected breaking change with that release.Expected Result
Dict keys for the headers parameter when using
requests.get()are still valid if a string enum is used.Actual Result
Instead it raises an
InvalidHeadererror stating that:Reproduction Steps
System Information
{ "chardet": { "version": "3.0.4" }, "charset_normalizer": { "version": "2.0.4" }, "cryptography": { "version": "2.8" }, "idna": { "version": "3.2" }, "implementation": { "name": "CPython", "version": "3.8.10" }, "platform": { "release": "5.13.0-48-generic", "system": "Linux" }, "pyOpenSSL": { "openssl_version": "1010106f", "version": "19.0.0" }, "requests": { "version": "2.28.0" }, "system_ssl": { "version": "1010106f" }, "urllib3": { "version": "1.26.6" }, "using_charset_normalizer": false, "using_pyopenssl": true }