在使用 python 的 urllib.urlencode() 时如何转义某些字符?
How can I escape certain characters while using python's urllib.urlencode()?
我有一本字典,我想将其作为查询参数进行 urlencode。
我正在访问的服务器希望查询看起来像这样:http://www.example.com?A=B,C
但是当我尝试使用 urllib.urlencode
构建 URL 时,我发现逗号变成了 %2C
:
>>> import urllib
>>> urllib.urlencode({"A":"B,C"})
'A=B%2CC'
有什么方法可以转义逗号,以便 urlencode
将其视为普通字符?
如果没有,我该如何解决这个问题?
您可以通过将某些字符明确指定为安全参数值来转义它们
urllib.quote(str, safe='~()*!.\'')
更多:https://docs.python.org/3.0/library/urllib.parse.html#urllib.parse.quote
您可以通过在到达端点之前将 query params
添加为字符串来执行此操作。
我已经使用 requests
提出了请求。
例如:
GET Request
import requests
url = "https://www.example.com/?"
query = "A=B,C"
url_final = url + query
url = requests.get(url_final)
print(url.url)
# https://www.example.com/?A=B,C
逗号(以及其他一些字符)在 RFC 3986 中定义为保留字符。这意味着逗号在 URL 的各个部分都定义了含义,如果它没有在该上下文中使用,则需要 percent-encoded.
也就是说,query parameter doesn't give the comma any special syntax, so in query parameters, we probably shouldn't be encoding it. That said, it's not entirely Requests' fault: the parameters are encoded using urllib.urlencode()
,也就是percent-encoding查询参数。
但这并不容易解决,因为一些 Web 服务使用 ,
而有些使用 %2C
,两者都没有错。您可能只需要自己处理这种编码。
我有一本字典,我想将其作为查询参数进行 urlencode。
我正在访问的服务器希望查询看起来像这样:http://www.example.com?A=B,C
但是当我尝试使用 urllib.urlencode
构建 URL 时,我发现逗号变成了 %2C
:
>>> import urllib
>>> urllib.urlencode({"A":"B,C"})
'A=B%2CC'
有什么方法可以转义逗号,以便 urlencode
将其视为普通字符?
如果没有,我该如何解决这个问题?
您可以通过将某些字符明确指定为安全参数值来转义它们
urllib.quote(str, safe='~()*!.\'')
更多:https://docs.python.org/3.0/library/urllib.parse.html#urllib.parse.quote
您可以通过在到达端点之前将 query params
添加为字符串来执行此操作。
我已经使用 requests
提出了请求。
例如:
GET Request
import requests
url = "https://www.example.com/?"
query = "A=B,C"
url_final = url + query
url = requests.get(url_final)
print(url.url)
# https://www.example.com/?A=B,C
逗号(以及其他一些字符)在 RFC 3986 中定义为保留字符。这意味着逗号在 URL 的各个部分都定义了含义,如果它没有在该上下文中使用,则需要 percent-encoded.
也就是说,query parameter doesn't give the comma any special syntax, so in query parameters, we probably shouldn't be encoding it. That said, it's not entirely Requests' fault: the parameters are encoded using urllib.urlencode()
,也就是percent-encoding查询参数。
但这并不容易解决,因为一些 Web 服务使用 ,
而有些使用 %2C
,两者都没有错。您可能只需要自己处理这种编码。