Ich versuche, Zugang zu Khan Academy mit ScribeJava OAuth-Mechanismus zu bekommen. Nachdem ich ein Token erfolgreich bekommen habe, bekomme ich eine Ausnahme von 401. Was ziemlich sicher ist über unberechtigten Zugriff. Und wenn ich die URL derOAuth in Java - OAuth-Fehler. Consumer access denied
ein ändernhttp://api-explorer.khanacademy.org/api/v1/user/videos/cGg1j1ZCCOs?userId=vilething&username=&email=
Es gibt mir eine Antwort. Aber alle benutzerbezogenen Informationen sind als Antwort leer.
public abstract class KhanAcademyAccess {
private final static String USER_AGENT = "Mozilla/5.0";
public static void main(String... args) throws UnsupportedEncodingException, NoSuchAlgorithmException, InvalidKeyException, IOException, Exception {
String videoId = "C38B33ZywWs";
String username = "###";
String password = "###";
final OAuth10aService service = new ServiceBuilder()
.apiKey("###")
.apiSecret("###")
.build(KAApi.instance());
//Get Request Token
final OAuth1RequestToken requestToken = service.getRequestToken();
System.out.println(requestToken.getToken());
sendPost("https://www.khanacademy.org/api/auth2/authorize", username, password, requestToken.getToken().toString());
final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, "");
System.out.println(accessToken);
final OAuthRequest request = new OAuthRequest(Verb.GET, "https://www.khanacademy.org/api/internal/_mt/user/videos/cGg1j1ZCCOs/log_compatability?", service);
service.signRequest(accessToken, request);
request.addHeader("Accept", "application/json; charset=utf-8");
request.addHeader("Content-Type", "application/json; charset=utf-8");
request.addHeader("X-Requested-With", "XMLHttpRequest");
request.addHeader("Accept-Encoding", "application/json");
Response response = request.send();
System.out.println(response.getCode());
System.out.println(response.getMessage());
System.out.println(response.getBody());
}
private static void sendPost(String url, String username, String password, String oauthToken) throws Exception {
DefaultHttpClient httpclient = new DefaultHttpClient();
// Comment out from here (Using /* and */)...
// ...to here and the request will fail with "HttpResponseException: Moved Permanently"
try {
HttpPost httpPost = new HttpPost(url);
String encoding = Base64Encoder.getInstance().encode(StringUtils.getBytes(username + ":" + password));
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("identifier", username));
params.add(new BasicNameValuePair("password", password));
params.add(new BasicNameValuePair("oauth_token", oauthToken));
httpPost.setEntity(new UrlEncodedFormEntity(params));
System.out.println("executing request " + httpPost.getURI());
// Create a response handler
ResponseHandler<String> responseHandler = new BasicResponseHandler();
HttpResponse responseBody = httpclient.execute(httpPost);
// Add your code here...
int responseCode = responseBody.getStatusLine().getStatusCode();
while(responseCode!=200){
for(Header header : responseBody.getAllHeaders()){
if(header.getName().equalsIgnoreCase("Location")){
responseCode = getRequest(header.getValue());
}
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// When HttpClient instance is no longer needed, shut down the connection
// manager to ensure immediate deallocation of all system resources
}
}
Ich bin mit Benutzernamen und Passwort-Authentifizierung, weil ich den Autorisierungsprozess automatisieren wollen und nicht wollen, Benutzer auf die Seite umgeleitet werden, und klicken Sie auf die Schaltfläche Akzeptieren.
Hinzufügen von Protokollen, die nützlich sein können, um das Problem
Anfrage Token zu identifizieren:
OAuth1RequestToken {oauth_token = t0000005405940108, oauth_token_secret = NyGQchdSAj7AwukA, oauth_callback_confirmed = true}
Zugang Token:
OAuth1AccessToken {oauth_token = t0000005413417574, oauth_token_secret = UMAV7Y54suAVPcJZ}