Для Python 3.x
Обратите внимание на следующее
В Python 3.x модули urllib
и urllib2
были объединены . Модуль называется urllib
. Итак, помните, что urllib
в Python 2.x и urllib
в Python 3.x являются РАЗЛИЧНЫМИ модулями.
Данные POST для urllib.request.Request
в Python 3 НЕ принимают строку (str
) - вам нужно передать объект bytes
(или итерацию bytes
)
Пример
передача json
данных с POST в Python 3.x
import urllib.request
import json
json_dict = { 'name': 'some name', 'value': 'some value' }
# convert json_dict to JSON
json_data = json.dumps(json_dict)
# convert str to bytes (ensure encoding is OK)
post_data = json_data.encode('utf-8')
# we should also say the JSON content type header
headers = {}
headers['Content-Type'] = 'application/json'
# now do the request for a url
req = urllib.request.Request(url, post_data, headers)
# send the request
res = urllib.request.urlopen(req)
# res is a file-like object
# ...
Наконец, обратите внимание, что вы можете отправить ТОЛЬКО запрос POST, если у вас есть НЕКОТОРЫЕ данные для отправки.
Если вы хотите выполнить HTTP POST без отправки каких-либо данных, вы должны отправить пустой dict как данные.
data_dict = {}
post_data = json.dumps(data_dict).encode()
req = urllib.request.Request(url, post_data)
res = urllib.request.urlopen(req)