Python:带有原始括号[]的url编码

问题描述

希望最终编码的url部分为:[%22AS%22]

我尝试过:

["AS"]创建%5B%22AS%22%5D

/["AS"/]创建%2F%5B%22AS%22%2F%5D

baseUrl = "https://www.example.com/api"
params=(('id','/["AS"/]'))
requests.request("GET",baseUrl,params=params,headers=headers,cookies=cookies,allow_redirects=True,timeout=timeout,proxies=proxies,)

有什么主意吗?我不想创建新的URL,而希望更改params的值(请参见下面的示例)。

解决方法

您可以尝试使用urlencode

from urllib.parse import urlencode
query_params = urlencode({"id": ["As"]})
url = "{}?{}".format('https://www.example.com/api',query_params)
print(url)
,

您将必须创建自己的URL,但这并不那么困难。

import requests
from urllib.parse import quote

baseUrl = "https://www.example.com/api"
params=[('id','["AS"]')]

param_str = "&".join([param[0]+"="+quote(param[1],safe='[]') for param in params])

req = requests.Request("GET",baseUrl,params=param_str)

# Just to check and verify
prepared_req = req.prepare()
print(prepared_req.url) # Prints 'https://www.example.com/api?id=[%22AS%22]'