Python: urllib2.urlopen (url, data) Зачем вам нужно urllib.urlencode () данных? - PullRequest
7 голосов
/ 03 февраля 2010

Я думал, что сообщение отправляло всю информацию в заголовках HTTP, когда вы использовали сообщение (я не очень хорошо осведомлен по этому вопросу, очевидно), поэтому я запутался, почему вы должны urlencode () данных к key=value&key2=value2 формат. Как это форматирование вступает в игру при использовании POST?:

# Fail
data = {'name': 'John Smith'}
urllib2.urlopen(foo_url, data)

но

# Success
data = {'name': 'John Smith'}
data = urllib.urlencode(data)
urllib2.urlopen(foo_url, data)

Ответы [ 2 ]

9 голосов
/ 03 февраля 2010

Это связано с заголовком «Content-Type»: клиент должен иметь представление о том, как кодируются данные POST или как он узнает, как их декодировать?

Стандартный способ выполненияэто через application / x-www-form-urlencoded формат кодирования.

Теперь, если вопрос «зачем нам кодировать?», ответ «потому что нам нужночтобы иметь возможность разграничить полезную нагрузку в контейнере HTTP ".

2 голосов
/ 03 февраля 2010

Данные должны быть в стандартном формате application / x-www-form-urlencoded .urlencode преобразует ваши аргументы в строку в кодировке URL.

...