我有一个URL字符串

https://example.com/search?'=$&(=/&)=!

我想把它变成它的逃逸形式

https://example.com/search?%28=%2F&%29=%21&%27=%24

据报道,res.request.path_url人使用的是Python.

我一直在try urllib.parse.quote/parse_qs,但这并没有让我达到这个目标:

import requests
from urllib.parse import quote, urlsplit, parse_qs

# reference:
res = requests.get("https://example.com/search", params={"(": "/", ")": "!", "'": "$"})
print(res.request.path_url)

url = "https://example.com/search?'=$&(=/&)=!"
p = urlsplit(url)

path_url = p.path or "/"
if p.query:
    parsed_query = parse_qs(p.query)
    escaped_qs = "&".join(
        f"{quote(key)}={','.join(quote(item) for item in value)}"
        for key, value in parse_qs(p.query).items()
    )
    path_url += f"?{escaped_qs}"

print(path_url)
/search?%28=%2F&%29=%21&%27=%24
/search?%27=%24&%28=/&%29=%21

也许有一种完全更简单的方法.有什么提示吗?

推荐答案

您可以使用quote,将the safe parameter设置为=,这样可以保留它,例如:

from urllib.parse import quote

url = "https://example.com/search?'=$&(=/&)=!"
(_, query) = url.split('?')
safified = [quote(x, safe='=') for x in query.split('&')]
print(safified) # ['%27=%24', '%28=%2F', '%29=%21']

Python相关问答推荐

具有多个选项的计数_匹配

更改matplotlib彩色条的字体并勾选标签?

2D空间中的反旋算法

pandas滚动和窗口中有效观察的最大数量

在pandas中使用group_by,但有条件

如何根据一列的值有条件地 Select 前N组?

多处理队列在与Forking http.server一起使用时随机跳过项目

Python列表不会在条件while循环中正确随机化'

如何在FastAPI中为我上传的json文件提供索引ID?

无论输入分辨率如何,稳定扩散管道始终输出512 * 512张图像

基于形状而非距离的两个numpy数组相似性

LocaleError:模块keras._' tf_keras. keras没有属性__internal_'''

matplotlib图中的复杂箭头形状

基于另一列的GROUP-BY聚合将列添加到Polars LazyFrame

Cython无法识别Numpy类型

如何在Gekko中使用分层条件约束

我可以不带视频系统的pygame,只用于游戏手柄输入吗?''

极柱内丢失类型信息""

python3中np. divide(x,y)和x/y有什么区别?'

为什么我的scipy.optimize.minimize(method=";newton-cg";)函数停留在局部最大值上?