requests
requests copied to clipboard
Safely handle, when uri contains IPv6 link local with %zone index
Issue:
When URI contains IPv6 link local with zone index (Ex: fe80::726f:8a26:222a:2bf3%eth0), requote_uri encodes all % to %25. Because of it, requests.get was requesting different resource.
Screenshot:

I'm proposing to ignore domain part in utils.unquote_unreserved.
Actual Result
>>> requests.utils.requote_uri('http://[fe80::726f:8a26:222a:2bf3%eth0]:8080/a%20b/index.html')
'http://[fe80::726f:8a26:222a:2bf3%25eth0]:8080/a%2520b/index.html'
Expected Result
>>> requests.utils.requote_uri('http://[fe80::726f:8a26:222a:2bf3%eth0]:8080/a%20b/index.html')
'http://[fe80::726f:8a26:222a:2bf3%eth0]:8080/a%20b/index.html'
System Information
# python3 -m requests.help
{
"chardet": {
"version": "3.0.4"
},
"cryptography": {
"version": "2.2.2"
},
"idna": {
"version": "2.8"
},
"implementation": {
"name": "CPython",
"version": "3.5.2"
},
"platform": {
"release": "4.4.71-UNRELEASED-v4-00050-g76f27ecf9a52",
"system": "Linux"
},
"pyOpenSSL": {
"openssl_version": "1000207f",
"version": "18.0.0"
},
"requests": {
"version": "2.22.0"
},
"system_ssl": {
"version": "1000207f"
},
"urllib3": {
"version": "1.24.1"
},
"using_pyopenssl": true
}