13

http://developer.github.com/v3/を使用してプロジェクトの問題を取得しようとしています。これは機能します:

curl -u "Littlemaple:mypassword" https://api.github.com/repos/MyClient/project/issues

クライアントのプロジェクトのすべてのプライベートな問題を返します。ただし、Pythonでこれを実装する方法を見つけることができません。私が見つけた両方の方法(たとえば、Python urllib2 Basic Auth Problem)は機能せず、404または403エラーを返します。

def fetch(url, username, password):
    """Wonderful method found on forums which does not work.""""
    passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
    passman.add_password(None, url, username, password)
    urllib2.install_opener(urllib2.build_opener(urllib2.HTTPBasicAuthHandler(passman)))

    req = urllib2.Request(url)
    f = urllib2.urlopen(req)
    return f.read()

...と:

def fetch(url, username, password):
    """Wonderful method found on forums which does not work neither.""""
    request = urllib2.Request(url)
    base64string = base64.encodestring('%s:%s' % (username, password)).replace('\n', '')
    request.add_header("Authorization", "Basic %s" % base64string)   
    return urllib2.urlopen(request).read()

何か案は?前もって感謝します!

4

4 に答える 4

16
r = requests.get('https://api.github.com', auth=('user', 'pass'))

Pythonrequestsはここに行く方法です。私はrequests、さまざまなWebサービスの相互作用のために、職場や自宅で幅広く使用してきました。以前のものと比べて使うのは楽しいです。注:authキーワードargは、authを必要とするすべての呼び出しで機能します。したがって、慎重に使用できます。つまり、GitHubに対するすべての呼び出しに必要なわけではなく、ログインが必要な呼び出しにのみ使用できます。例えば:

r = requests.get('https://api.github.com/gists/starred', auth=('user', 'pass'))

GitHubのログインはここに記載されています:

http://pypi.python.org/pypi/requests/0.6.1

于 2011-12-11T18:13:01.297 に答える
6

404の場合は、URLが間違っている可能性があります。403の場合は、領域が間違っている可能性があります。

手始めに、URLをadd_passwordに渡しますが、実際にはベースURLのみを渡す必要があります。また、install_openerの代わりに、おそらく新しいオープナーを作成する必要があります。

例については、このレシピを参照してください

class NoOpHandler(urllib2.HTTPRedirectHandler):
    def redirect_request(self, req, fp, code, msg, headers, newUrl):
        return None

passmanager = urllib2.HTTPPasswordMgrWithDefaultRealm()
passmanager.add_password(None, baseurl, username, password)
auth_handler = urllib2.HTTPBasicAuthHandler(passmanager)
opener = urllib2.build_opener(auth_handler, NoOpHandler())
于 2011-06-01T19:25:51.220 に答える
3

この方法でもできます

 r = requests.get('https://user:pass@api.github.com')
于 2017-03-16T12:19:45.437 に答える
0

libcurlへのPythonインターフェースであるpycurlを使用します。

于 2011-06-01T17:39:57.810 に答える