使用小写字母的Python URL编码?

时间:2019-05-23 14:43:51

标签: c# python asp.net url encoding

使用“ urllib.parse.quote”时,编码全部大写。我的代理服务器是用C#编写的,但编码要小写。

例如,<被编码(UTF-8)为%3C。但是,C#的WebUtility.UrlDecode(request.RawUrl)除外所有小写字母:%3c。结果是两个系统无法互相通信。

C#ASP.NET确实还有另一个可以使用大写编码的功能。此功能不再存在。 (已退休)Link to used C# function

import urllib
my_text="?address=This is an Address!&name=This is a test of it all!<.>"
my_url=urllib.parse.quote(my_text)
my_url

我希望使用小写字母在python一侧编码URL。您知道如何实现此目标吗?

另一种可能的解决方案是在C#端使用大写字母解码URL,但是似乎没有此功能。 :(

2 个答案:

答案 0 :(得分:1)

<块引用>

我希望用小写字母对python端的URL进行编码。知道如何实现这一点吗?

我们有正则表达式,它是一种强大的武器。试试这个:

import re
import urllib.parse  # I'm curious that you just imported `urllib`.


my_text = "?address=This is an Address!&name=This is a test of it all!<.>"
my_url = re.sub(r'%[0-9A-Z]{2}',                             # pattern
                lambda matchobj: matchobj.group(0).lower(),  # function used to replace matched string
                urllib.parse.quote(my_text))                 # input string
my_url

输出为:

%3faddress%3dThis%20is%20an%20Address%21%26name%3dThis%20is%20a%20test%20of%20it%20all%21%3c.%3e

与原版对比:

%3Faddress%3DThis%20is%20an%20Address%21%26name%3DThis%20is%20a%20test%20of%20it%20all%21%3C.%3E

这将满足您的要求。


如果要以这种方式处理多个网址,最好使用regular expression object

import re
import urllib.parse


my_re = re.compile(r'%[0-9A-Z]{2}')  # pattern

my_text = "?address=This is an Address!&name=This is a test of it all!<.>"
my_url = my_re.sub(lambda matchobj: matchobj.group(0).lower(),  # function used to replace matched string
                   urllib.parse.quote(my_text))                 # input string
my_url

文档:

答案 1 :(得分:0)

您可以使用.lower()

my_url="http://mHJKiHgHJKMKLvkdddd.cOm"
my_url.lower()

'http://mhjkihghjkmklvkdddd.com'