我现在有一些 url 的 query 是直接从 bytes 进行百分号编码之后拼接成的。
但是 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
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.