3

Help me please. I make client for android for github.com api v3 and i have a trouble with authorization. (login = mytest12345 , pass = 12345test)

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

Python authorization sample 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())

This is my code:

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 error in final

1
  • Could you give a snippet of code of auth? Commented Jun 30, 2016 at 8:14

3 Answers 3

3

I know you want it in Java, but you might be interested in an answer I just provided to another question for further Python examples.

In order to authenticate I had to specifically state the type of authentication (what follows is Python code):

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

But it doesn't appear that you are adding the "Basic " prefix. Try adding that in and seeing if you get any success.

Sign up to request clarification or add additional context in comments.

1 Comment

can you please give me full code for github authentication ? I am stuck in issue and i could not understand auth flow. @Alexey
0
def encoded = Base64.getEncoder().encodeToString((username + ":" + password).getBytes());
request.setHeader("Authorization", "Basic " + encoded);

1 Comment

Please explain your solution. Code-only answers are discouraged on SO. Thank you.
0

Finally, after wasting one full day I got it. This is my working code.Just pass uName & password, it'll return JSON string.

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;
}

Reference links : Link1 & Link for basci Auth & Link for web flow:Android

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.