百分号编码URL与蟒蛇(percent encoding URL with python)

2019-06-27 08:12发布

当我输入一个URL到maps.google.com如https://dl.dropbox.com/u/94943007/file.kml ,将这个URL编码为:

https:%2F%2Fdl.dropbox.com%2Fu%2F94943007%2Ffile.kml

我想知道什么是所谓的这种编码,并有办法编码这样使用python网址?

我尝试这样做:

这个过程被称为URL编码 :

>>> urllib.quote('https://dl.dropbox.com/u/94943007/file.kml', '')
'https%3A%2F%2Fdl.dropbox.com%2Fu%2F94943007%2Ffile.kml'

但并没有得到预期的结果:

'https%3A//dl.dropbox.com/u/94943007/file.kml'

我需要的是这样的:

https:%2F%2Fdl.dropbox.com%2Fu%2F94943007%2Ffile.kml

如何正确编码这个网址?

文档在这里:

https://developers.google.com/maps/documentation/webservices/

状态:

所有字符是URL编码使用“%”字符和对应于它们的UTF-8字符的两字符的十六进制值进行编码。 例如,上海+中国以UTF-8将URL编码为%E4%B8%8A%E6%B5%B7%2B%E4%B8%AD%E5%9C%8B。 字符串? 和Mysterians将URL编码为%3F +和+的+ Mysterians。

Answer 1:

使用

urllib.quote_plus(url, safe=':')

既然你不想结肠编码需要指定调用时urllib.quote()

>>> expected = 'https:%2F%2Fdl.dropbox.com%2Fu%2F94943007%2Ffile.kml'
>>> url = 'https://dl.dropbox.com/u/94943007/file.kml'
>>> urllib.quote(url, safe=':') == expected
True

urllib.quote()需要一个关键字参数safe默认为/和指示哪些字符被认为是安全的,并且因此不需要被编码。 在你的第一例,你用''这导致对编码中的斜线。 下面你在斜线没有可能编码粘贴意外的产量从先前的尝试,你没有设置关键字参数safe可言。

重写的默认'/' ,而是排除与冒号':'是什么最终产生期望的结果。

编辑 :此外,API调用的空格编码为加号。 因此urllib.quote_plus()应使用(其关键字参数safe不会默认为'/' )。



文章来源: percent encoding URL with python