python urllib2对http和https URL的工作方式不同

python urllib2对http和https URL的工作方式不同,python,urllib2,Python,Urllib2,有人能给我解释一下为什么在urllib2中实现了以下内容吗 当我使用http传递编码的url时,它会再次对参数进行编码 而对于https,它不会再次进行URL编码 假设(http)调用为http/:example.com?email=amit%40sethi.com请求为 在https的情况下,它是 谢谢 编辑:添加更多详细信息 我提出的基本要求是 SF_EXTEND_RESOURCE = "https://www.superfax.in/api/voice/planchange/?" p

有人能给我解释一下为什么在urllib2中实现了以下内容吗

当我使用http传递编码的url时,它会再次对参数进行编码 而对于https,它不会再次进行URL编码

假设(http)调用为http/:example.com?email=amit%40sethi.com请求为

在https的情况下,它是

谢谢

编辑:添加更多详细信息

我提出的基本要求是

SF_EXTEND_RESOURCE = "https://www.superfax.in/api/voice/planchange/?"

params_dict = {'username':USERNAME,
                               'password':PASSWORD,
                               'email':str(user.email)
                               }
_url = SF_EXTEND_RESOURCE + urlencode(params_dict)
response = urllib2.urlopen(_url).read()

现在我的问题是,当我使用http时,电子邮件字符串被编码两次,而https则不是这样。我正在ubuntu Lucid上使用Python 2.6.5。我无法理解这是如何不可复制的

我刚刚试过,但对我来说,这种行为与你观察到的不同:对我来说,http和https URL的工作原理是一样的

import urllib2

out = urllib2.urlopen("https://www.google.com/?q=foo%40bar");
print out.geturl()
open('out1', 'w').write(out.read())
out = urllib2.urlopen("http://www.google.com/?q=foo%40bar");
print out.geturl()
open('out2', 'w').write(out.read())

比较
out1
out2
,您会发现两者都是正确的foo@bar在搜索框的“value”属性中,因此似乎没有进行任何双重编码。

无法再现这一点,在使用http和https打开URL后,查询字符串在任何情况下都不会再次编码。请张贴您正在使用的实际代码和/或您是如何得出此结论的。