У меня есть следующий код, который должен выполнить первую часть создания новой загрузки на github. Он должен отправлять json-данные с помощью POST.
jsonstring = '{"name": "test", "size": "4"}'
req = urllib2.Request("https://api.github.com/repos/<user>/<repo>/downloads")
req.add_header('Authorization', 'token ' + '<token>')
result = urllib2.urlopen(req, jsonstring)
Если я удалю , jsonstring
из urlopen()
, он не выйдет из строя и выдаст мне список доступных загрузок. Однако, если я попытаюсь отправить json-строку POST, я получу ошибку 404.
Проблема должна быть с json или с тем, как я его отправляю, но я не могу понять, в чем проблема. Строки в <...>
находятся прямо в реальном коде, я просто удалил их из поста.
Я попробовал примерно то же самое с curl
в командной строке, с немного другим методом аутентификации, и это сработало.
Проверено:
Работает (возвращает нужный json):
curl -u "user:password" --data "json..." https://api.github.com/repos/<user>/<repo>/downloads
Работает:
curl -H 'Authorization: token <token>' https://api.github.com/
Не работает (возвращает "неверные учетные данные"):
curl -H 'Authorization: token <invalid_token>' https://api.github.com/
Не работает ("не найдено"):
curl -H 'Authorization: token <valid_token>' --data "json..." https://api.github.com/repos/<user>/<repo>/downloads
Это не похоже на проблему, специфичную для кода Python. Данные json POST, кажется, в порядке, и авторизация токена OAuth, кажется, (по крайней мере, частично) работает. Но когда они собраны вместе, это перестает работать.