2016-07-18 6 views
0

Wenn diese api Aufruf: https://api.twitter.com/1.1/followers/list.json?amp%3Binclude_user_entities=false&amp%3Bscreen_name=twitterdev&amp%3Bskip_status=true&cursor=-1Fehlermeldung "Konnte Sie nicht authentifizieren" mit Code 32 beim Aufruf von twitter API?

mit folgenden Berechtigung:

OAuth oauth_consumer_key="XXXXXXXXXXXXXXXXXXXXXXXXX", oauth_nonce="0ddddff20481ae3567739f4eefa49b22", oauth_signature="7DQKPmbqJAzRh%2FM0UTB2w82lGvY%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1468795885", oauth_token="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", oauth_version="1.0" 

auf meine Anhänger Liste von Twitter zu bekommen, erhalte ich das Json Objekt meiner Anhänger erfolgreich, aber wenn der Wertes des ersetzende screen_name (Parameter mit der oberen api bestanden) von twitterdev zu meinem eigentlichen screen_name Wert, bekomme ich diesen Fehler:

{ 
"errors": [ 
    { 
     "code": 32, 
     "message": "Could not authenticate you." 
    } 
] 

}

Bitte, Kann mir jemand helfen, dieses Problem zu lösen?


Der folgende Code ein OAuth-Signatur für meine Anfrage zu generieren:

String oauth_signature_method = "HMAC-SHA1"; 
    String oauth_consumer_key = "XXXXXXXXXXXXXXXXXXXXXXXXXXXX"; 
    String oauth_token= "XXXXXXXXXXXXXXXXXXXXXXXXXXXX"; 

    String uuid_string = UUID.randomUUID().toString(); 
    uuid_string = uuid_string.replaceAll("-", ""); 
    String oauth_nonce = uuid_string; 

    Date now = Calendar.getInstance().getTime(); 
    String oauth_timestamp = (new Long(now.getTime()/1000)).toString(); 

    String parameter_string = "oauth_consumer_key=" + oauth_consumer_key + "&oauth_nonce=" + 
      oauth_nonce + "&oauth_signature_method=" + oauth_signature_method + 
      "&oauth_timestamp=" + oauth_timestamp + "&oauth_token=" + authToken + 
      "&oauth_version=1.0"; 

    String signature_base_string = " GET&https%3A%2F%2Fapi.twitter.com%2F1.1%2Ffollowers%2Flist.json&"+ 
      URLEncoder.encode("user_id=XXXXXXXXXX&", "UTF-8") + 
      URLEncoder.encode(parameter_string, "UTF-8"); 

    String oauth_signature = computeSignature(signature_base_string, "XXXXXXXXXXXXXXXXXXXXXXXXXXX" + "&"); 

    String auth_header_string = "OAuth oauth_consumer_key=\"" + oauth_consumer_key + 
      "\", oauth_nonce=\"" + oauth_nonce + 
      "\", oauth_signature=\""+URLEncoder.encode(oauth_signature, "UTF-8") + 
      "\", oauth_signature_method=\"HMAC-SHA1" + 
      "\", oauth_timestamp=\""+ oauth_timestamp + 
      "\", oauth_token=\""+oauth_token + 
      "\", oauth_version=\"1.0\""; 


private String computeSignature(String baseString, String keyString){ 

    SecretKey secretKey = null; 

    byte[] keyBytes = keyString.getBytes(); 
    secretKey = new SecretKeySpec(keyBytes, "HmacSHA1"); 

    Mac mac = null; 
    try { 
     mac = Mac.getInstance("HmacSHA1"); 
    } catch (NoSuchAlgorithmException e) { 
     e.printStackTrace(); 
    } 

    try { 
     mac.init(secretKey); 
    } catch (InvalidKeyException e) { 
     e.printStackTrace(); 
    } 

    byte[] text = baseString.getBytes(); 

    return new String(Base64.encodeBase64(mac.doFinal(text))).trim(); 
} 

Antwort

1

Sie können die Anfrage Abfrageparameter ändern, ohne eine neue Signatur zu regenerieren. Siehe https://dev.twitter.com/oauth/overview/creating-signatures speziell "Parameter sammeln".

Es gibt viele Beispiele in stackoverflow für das Signieren von Anfragen, Sie sollten dort anfangen, speziell nach den Frameworks suchen, die Sie in Android verwenden.

+0

Vielen Dank für Ihre Erklärung, ich fand eine Sammlung von Anweisungen, um die OAuth-Signatur zu generieren, aber ich bekomme den gleichen Fehler. Ich habe die Aussagen zu der Frage hinzugefügt, bitte, können Sie diese Aussagen überprüfen, um mir zu helfen, das Problem zu finden? –

+0

Ich vermute, Sie könnte es sein, dass Sie die = codieren und & Zeichen URLEncoder.encode („user_id = XXXXXXXXXX &“, „UTF-8“) ich die joauth-Bibliothek verwendet, dies zu tun, so bin ich nicht die beste Person, um die Richtigkeit zu überprüfen. z.B. https://github.com/yschimke/oksocial/blob/master/src/main/java/com/baulsupp/oksocial/services/twitter/Signature.java –

Verwandte Themen