Так я предварить это с советом, что если вы используете библиотеку, это так же просто, как:
from github3 import GitHubEnterprise
gh = GitHubEnterprise(token=my_token)
repository = gh.repository('abc', 'def')
release = repository.release(id=401)
asset = release.upload_asset(content_type='application/binary', name='foo.sh', asset=open('sometext.txt', 'rb'))
Имея это в виду, я также предварить это с «приложения/двоичный» не тип реальной информации (см: https://www.iana.org/assignments/media-types/media-types.xhtml)
Далее, если вы read the documentation, вы заметите, что GitHub требует от клиентов, которые имеют реальную SNI (Имя сервера) Индикация, поэтому в зависимости от версии Python, вы можете также необходимо установить pyOpenSSL
, pyasn1
и ndg-httpsclient
от PyPI.
Я не уверен, что URL выглядит для случаев предприятия, но и для общественного GitHub, это выглядит следующим образом:
https://uploads.github.com/repos/octocat/Hello-World/releases/1/assets?name=foo.sh
Таким образом, вы будете иметь, что, как url
, плюс вы собираетесь для получения ваших учетных данных (в вашем случае вы, похоже, хотите использовать базовый auth). Тогда вы будете хотеть действительный медиа-типа в заголовках, например,
headers = {'Content-Type': 'text/plain'}
И ваш звонок будет выглядеть почти точно правильно:
requests.post(url, headers=headers, data=open('file.txt', 'rb'), auth=(username, password))
Чтобы получить правильный URL, вы должны сделать:
release = requests.get(release_url, auth=(username, password))
upload_url = release.json().get('upload_url')
Примечание это URITemplate. Вам нужно будет удалить шаблон или использовать библиотеку, например uritemplate.py
, для ее анализа и использования для создания вашего URL-адреса для вас.
Последнее напоминание, github3.py (библиотека в оригинальном примере) заботится обо всем этом для вас.
может быть ошибкой url, также может быть ошибкой auth согласно этой ссылке docs – nthall