如何使用Python Requests修改查询参数后拼接合法URL
问题解决思路及修正代码
问题根源
你犯了两个关键错误:
- 把不属于URL的
[]=char文本直接混进了URL字符串里,导致查询参数被错误识别,服务器没法正确解析请求路径; - 手动替换URL编码后的
%5B/%5D为原始方括号,破坏了URL的编码规则,直接导致URL非法,触发404错误。
修正方案
先把合法URL和附加文本拆分,单独处理URL的编码,最后再按需拼接文本(注意别把文本塞到URL里):
import requests from urllib.parse import urlparse, urlunparse, requote_uri # 拆分出真正的URL和附加文本 raw_valid_url = 'https://www.example.com?param=specialanother' extra_text = '[]=char' # 解析URL并重新编码查询参数,保证URL格式合法 parsed_url = urlparse(raw_valid_url) encoded_query = requote_uri(parsed_url.query) valid_url = urlunparse([ parsed_url.scheme, parsed_url.netloc, parsed_url.path, parsed_url.params, encoded_query, parsed_url.fragment ]) # 如果需要把文本和URL拼在一起(仅作为字符串保存,不是URL的一部分) self.url = valid_url + extra_text
关键说明
- 拆分URL与文本:必须明确区分哪些是URL的组成部分,哪些是额外附加的文本,不能混在一起处理;
- 依赖标准库处理编码:永远不要手动替换URL的编码字符,
urllib.parse里的方法会自动处理合法的URL编码,保证服务器能正确识别; - 拼接文本注意事项:如果一定要把
[]=char和URL放在同一个字符串里,只能作为URL之后的附加内容,不能嵌入到URL的查询参数或路径中。
内容的提问来源于stack exchange,提问作者Siya
相关产品推荐
相关产品推荐

