3

お願い助けて。github.com api v3 の Android 用クライアントを作成しましたが、認証に問題があります。(ログイン = mytest12345 、パス = 12345test)

http://developer.github.com/v3/

Python 認証サンプルhttp://agrimmsreality.blogspot.com/2012/05/sampling-github-api-v3-in-python.html

serverurl="https://api.github.com"

# Add your username and password here, or prompt for them
auth=BasicAuth(user, password)

# Use your basic auth to request a token
# This is just an example from http://developer.github.com/v3/
authreqdata = { "scopes": [ "public_repo" ], "
               note": "admin script" }
resource = Resource('https://api.github.com/authorizations',
                   pool=pool, filters=[auth])
response = resource.post(headers={ "Content-Type": "application/json" },
                        payload=json.dumps(authreqdata))
token = json.loads(response.body_string())['token']

"""
Once you have a token, you can pass that in the Authorization header
You can store this in a cache and throw away the user/password
This is just an example query.  See http://developer.github.com/v3/
for more about the url structure
"""
resource = Resource('https://api.github.com/user/repos', pool=pool)
headers = {'Content-Type' : 'application/json' }
headers['Authorization'] = 'token %s' % token
response = resource.get(headers = headers)
repos = json.loads(response.body_string())

これは私のコードです:

public String Authorization(){
String result = new String("");
try{
HttpClient client = new DefaultHttpClient();

HttpPost post = new HttpPost("https://api.github.com");

post.setHeader("https://api.github.com/authorizations", Base64.encodeToString("mytest12345:12345test".getBytes(), Base64.DEFAULT));
HttpParams pers;

JSONObject json = new JSONObject("{\"scopes\": [\"public_repo\"],\"note\": \"admin script\"}");
StringEntity se = new StringEntity( json.toString());  
se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
post.setEntity(se);

StringBuilder builder = new StringBuilder();
HttpResponse response = client.execute(post);

BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(),"windows-1251"));
StringBuilder sb = new StringBuilder();
String line = null;

while ((line = reader.readLine()) != null) {
sb.append(line + System.getProperty("line.separator"));
}    
result = sb.toString();
} catch (org.apache.http.client.ClientProtocolException e) {
result = "ClientProtocolException: " + e.getMessage();
} catch (IOException e) {
result = "IOException: " + e.getMessage();
} catch (Exception e) {
result = "Exception: " + e.getMessage();
}

return result;
}

最終的に500エラー

4

3 に答える 3

3

あなたが Java でそれを望んでいることは知っていますが、Python のさらなる例について、別の質問に対して私が提供したばかりの回答に興味があるかもしれません。

認証するために、認証の種類を具体的に述べる必要がありました (以下は Python コードです)。

base64string = base64.encodestring('%s:%s' % (username, passwd)).replace('\n', '')
req.add_header("Authorization", "Basic %s" % base64string)

ただし、「基本」プレフィックスを追加しているようには見えません。それを追加してみて、成功するかどうかを確認してください。

于 2012-07-23T22:44:16.150 に答える
0

最後に、丸一日を無駄にした後、私はそれを手に入れました。これは私の作業コードです。uName とパスワードを渡すだけで、JSON 文字列が返されます。

public String Authorization(String username, String password) {
    String result = null;
    HttpClient client = new DefaultHttpClient();
    HttpGet httpGet = new HttpGet("https://api.github.com/user");

    String encode = Base64.encodeToString((username + ":" + password).getBytes(), Base64.DEFAULT).replace("\n", "");
    httpGet.setHeader("Authorization", "Basic " + encode);
    try {
        HttpResponse httpResponse = client.execute(httpGet);
        InputStream inputStream = httpResponse.getEntity().getContent();
        InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
        StringBuilder stringBuilder = new StringBuilder();
        String bufferedStrChunk = null;
        while ((bufferedStrChunk = bufferedReader.readLine()) != null) {
            stringBuilder.append(bufferedStrChunk);
        }

        result = stringBuilder.toString();

    } catch (ClientProtocolException cpe) {
        System.out.println("ClientProtocolException :" + cpe);
        cpe.printStackTrace();
    } catch (IOException ioe) {
        System.out.println("IOException :" + ioe);
        ioe.printStackTrace();
    }

    return result;
}

参考リンク:Link1 & Link for basci Auth & Link for web flow:Android

于 2016-12-16T16:52:25.407 に答える