nit: I prefer keeping it to UTF-8 - something closer to suggestion commit: https://github.com/hodlinator/bitcoin/commit/758d5da7377ff5a43e8ab98b4c52637279ee4b59
def post_raw(self, path, data):
if isinstance(data, str):
data = data.encode("utf-8")
assert isinstance(data, bytes), f"Expected data as bytes but got: {type(data)}"
req = (f"POST {path} HTTP/1.1\r\n" +
f"Authorization: Basic {str_to_b64str(self.authpair)}\r\n" +
f"Content-Length: {len(data)}\r\n\r\n").encode("utf-8")
req += data
self.conn.sock.sendall(req)
With ASCII it's easy to trigger errors like:
2026-04-16T07:48:52.476912Z TestFramework (INFO): Checking excessive request size
2026-04-16T07:48:52.881198Z TestFramework (ERROR): Unexpected exception:
Traceback (most recent call last):
File "/home/hodlinator/bc/2/test/functional/test_framework/test_framework.py", line 143, in main
self.run_test()
~~~~~~~~~~~~~^^
File "/home/hodlinator/bc/2/./build/test/functional/interface_http.py", line 107, in run_test
self.check_excessive_request_size()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
File "/home/hodlinator/bc/2/./build/test/functional/interface_http.py", line 213, in check_excessive_request_size
conn.post_raw('/', f'{{"jsonrpc": "2.0", "id": "0", "method": "submitblock", "params": ["{"₿" * bytes_above_limit}"]}}')
~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/hodlinator/bc/2/./build/test/functional/interface_http.py", line 71, in post_raw
self.conn.sock.sendall(req.encode("ascii"))
~~~~~~~~~~^^^^^^^^^
UnicodeEncodeError: 'ascii' codec can't encode characters in position 235-33554597: ordinal not in range(128)