python-bitcoinrpc icon indicating copy to clipboard operation
python-bitcoinrpc copied to clipboard

Support '/' character in HTTP password

Open kristapsk opened this issue 2 years ago • 0 comments

It should be callers responsibility to properly encode URL.

This will unquote any %.., but is especially important for /, due to how urllib.parse.urlparse() works.

>>> import urllib.parse as urlparse
>>> url = urlparse.urlparse('http://user:pwdwith/[email protected]:8332')
>>> print (url.username, url.password, url.hostname, url.port)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.8/urllib/parse.py", line 177, in port
    raise ValueError(message) from None
ValueError: Port could not be cast to integer value as 'pwdwith'
>>> from requests.utils import quote
>>> url = urlparse.urlparse('http://user:{}@127.0.0.1:8332'.format(quote('pwdwith/slash', safe='')))
>>> print (url.username, url.password, url.hostname, url.port)
user pwdwith%2Fslash 127.0.0.1 8332
>>> print (url.username, urlparse.unquote(url.password), url.hostname, url.port)
user pwdwith/slash 127.0.0.1 8332

Will not work with Python2 as urlparse module does no thave unquote(). But Python2 is long time EOL and should not be used anyway.

kristapsk avatar Dec 15 '21 09:12 kristapsk