Конвертировать curl POST в urllib-запрос python3 - PullRequest
0 голосов
/ 17 января 2019

Следующая команда curl работает как задумано. Использует POST для отправки немного информации на веб-сайт.

    curl 'https://...' \
     -X PUT \
     -d "submission[posted_grade]=65" \
     -H "Authorization: Bearer 10~X" 

Какой должен быть эквивалентный код python3, выдает ошибку 500: Внутренняя ошибка сервера

url_string = 'https://...'
data = "submission[posted_grade]=40"
data = data.encode('utf-8')
req = urllib.request.Request(url_string, data)
req.add_header("Authorization", "Bearer 10~X")
req.add_header("Content-Type", "application/json")
response = urllib.request.urlopen(req)
print(response.read())

Уже пробовал

data = {'submission[posted_grade]': '40'}
data = json.dumps(data)
data = data.encode('utf-8')

Что дает "Ошибка HTTP 422: необработанный объект"

Есть идеи по его устранению?

1 Ответ

0 голосов
/ 17 января 2019

Спасибо @ Коди

Извлеченный урок, PUT! = POST

Следующий код работает как положено:

url_string = 'https://...'
data = "submission[posted_grade]=40"
data = data.encode('utf-8')
req = urllib.request.Request(url=url_string, data=data, method='PUT')
req.add_header("Authorization", "Bearer 10~X")
response = urllib.request.urlopen(req)
...