Разница в работе Python urllib2 для http и https URL - PullRequest
0 голосов
/ 26 февраля 2012

Может кто-нибудь объяснить мне, почему в urllib2 реализовано следующее.

Когда я передаю закодированный URL, используя http, он снова кодирует параметры тогда как в случае https он не будет повторно кодировать urlencode

так скажем, что (http) вызов - http //: example.com?email=amit%40sethi.com, запрос -

http://example.com? = Электронный Амит% 2540sethi.com

где, как в случае https, это

https://example.com? = Электронный Амит% 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. Я использую Python 2.6.5 на Ubuntu Lucid. Я не могу понять, как это не воспроизводимо.

1 Ответ

1 голос
/ 26 февраля 2012

Я только что попробовал, и для меня поведение не то, что вы наблюдаете: для меня URL-адреса 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())

Сравните out1 и out2, и вы обнаружите, что оба правильных foo @ bar в атрибуте "value" окна поиска, так что, похоже, двойного кодирования не происходит.

...