请帮帮我。我为github.com api v3制作了android的客户端,我在授权方面遇到了麻烦。 (login = mytest12345,pass = 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错误
答案 0 :(得分:3)
我知道你在Java中想要它,但你可能会对an answer I just provided to another question感兴趣以获得更多Python示例。
为了进行身份验证,我必须明确说明身份验证的类型(以下是Python代码):
base64string = base64.encodestring('%s:%s' % (username, passwd)).replace('\n', '')
req.add_header("Authorization", "Basic %s" % base64string)
但似乎没有添加“基本”前缀。尝试添加它,看看你是否取得了任何成功。
答案 1 :(得分:0)
def encoded = Base64.getEncoder().encodeToString((username + ":" + password).getBytes());
request.setHeader("Authorization", "Basic " + encoded);
答案 2 :(得分: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