用于http和https网址的python urllib2的工作差异

时间:2012-02-26 15:54:12

标签: python urllib2

有人可以向我解释为什么在urllib2中实现了以下内容。

当我使用http传递编码的网址时,它会再次对参数进行编码 而在https的情况下,它不再是urlencode

所以我们说(http)电话是http //:example.com?email=amit%40sethi.com请求是

http://example.com?email=amit%2540sethi.com

在https的情况下,它是

https://example.com?email=amit%40sethi.com

由于

编辑:添加更多详情

我正在提出的基本要求是

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。我无法理解这是不可重复的。

1 个答案:

答案 0 :(得分:1)

我只是尝试过,对我来说,行为不是你观察到的:对我来说,http和https网址的工作原理相同。

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())

比较out1out2,你会发现搜索框的“value”属性中的foo @ bar都是正确的,所以似乎没有任何双重编码继续。