Вопрос по python, json, post – Github-api, выдающий 404 при передаче json-данных с помощью python + urllib2

4

У меня есть следующий код, который должен выполнить первую часть создания новой загрузки на 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(), это не подводит, и дает мне список доступных загрузок. Тем не менее, если я пытаюсь POST JSON-строка, я получаю 404 ошибку.

Проблема должна быть в json или в том, как я его отправляю, но я не могу понять, в чем проблема. Струны в<...> правы в фактическом коде, я просто удалил их из поста

Я пытался примерно то же самое сcurl в командной строке, с немного другим методом аутентификации, и это сработало.

Tested:

Работает (возвращает желаемый 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, кажется, (по крайней мере частично) работает. Но когда они собраны вместе, он перестает работать.

Error: User Rate Limit Exceeded varesa
Error: User Rate Limit Exceeded blahdiblah

Ваш Ответ

4   ответа
-1

data = {"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, urllib.parse.urlencode(data))
Error: User Rate Limit Exceeded varesa
Error: User Rate Limit Exceededdeveloper.github.com/v3Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededurllib.urlencode.
1

Render an arbritrary Markdown document

POST /markdown Input

text Required string - The Markdown text to render

{"text": "Hello world github/linguist#1 **cool**, and #1!"}

import urllib2
import json


data = {"text": "Hello world github/linguist#1 **cool**, and #1!"}
json_data = json.dumps(data)

req = urllib2.Request("https://api.github.com/markdown")
result = urllib2.urlopen(req, json_data)

print '\n'.join(result.readlines())

2

import urllib2
import json
import getpass
import base64

# Generate a token from the username and password.
# NOTE: this is a naive implementation. Store pre-retrieved tokens if possible.
username = 'pelson'
passwd = getpass.getpass() # <- this just puts a string in passwd (plaintext)

req = urllib2.Request("https://api.github.com/authorizations")

# add the username and password info to the request
base64string = base64.encodestring('%s:%s' % (username, passwd)).replace('\n', '')
req.add_header("Authorization", "Basic %s" % base64string)

data = json.dumps({"scopes":["repo"], "note":"Access to your repository."})
result = urllib2.urlopen(req, data)
result = json.loads('\n'.join(result.readlines()))
token = result['token']

# add an issue to the tracker using the new token
repo = 'name_of_repo'
data = json.dumps({'title': 'My automated issue.'})
req = urllib2.Request("https://api.github.com/repos/%s/%s/issues" % (username, repo))
req.add_header("Authorization", "token %s" % token)
result = urllib2.urlopen(req, data)

result = json.loads('\n'.join(result.readlines()))
print result['number']

3

Error: User Rate Limit Exceeded

Похожие вопросы