但是 python 的 urllib.parse.parse_qs 的解析是基于 str 的,默认所有的 query 都是百分比编码的字符串,在解析的时候会先解析为 bytes ,然后 bytes.decode(encoding=encoding) 转成字符串。
所以用 parse_qs 无法解析这些 query string 。
标准库里同时提供了 unquote_to_bytes,但是并没有对应的 parse_qs_to_bytes 来解析整个 query string ,有什么简单地办法来处理这个 query ?
如果要自己手动分割 query string 的话感觉相当于要重新实现 parse_qs 了
from urllib.parse import parse_qs, quote, unquote_to_bytes, urlparse
raw_bytes = bytes.fromhex('123456789abcdef123456789abcdef123456789a')
url = f'https://example.com/?q={quote(raw_bytes)}'
print(url)
assert unquote_to_bytes(quote(raw_bytes)) == raw_bytes
parsed_q = parse_qs(urlparse(url).query).get("q")[0].encode()
print(parsed_q.hex()) # 12345678efbfbdefbfbdefbfbdefbfbd234567efbfbdefbfbdefbfbdefbfbd12345678efbfbd
https://gist.github.com/trim21/b60d3999bea03bcac403380d4b157a02