Twitter-oauth-Request-Token-Response-code 401
Arbeite ich an einem twitter-oauth-login. Allerdings, wenn ich die request_token
, der allererste Schritt, den response-code immer wieder 401 Unauthorized
.
Ich suchte eine Menge für eine Woche, aber ich kann nicht finden die Lösung, bitte um Hilfe.
Hier ist meine Verbindung:
URL url = new URL("https://api.twitter.com/oauth/request_token");
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestProperty("Host","api.twitter.com");
conn.setRequestProperty("Authorization", data);
conn.setRequestMethod("POST");
conn.connect();
Für meine Daten:
String data = "OAuth oauth_nonce=\"" + oauth_nonce
+ "\", oauth_callback=\"" + oauth_callback
+ "\", oauth_signature_method=\"" + oauth_signature_method
+ "\", oauth_timestamp=\"" + oauth_timestamp
+ "\", oauth_consumer_key=\"" + oauth_consumer_key
+ "\", oauth_signature=\"" + oauth_signature
+ "\", oauth_version=\"" + oauth_version + "\"";
Ich bin mir auch sicher, dass meine Signatur richtig ist, weil ich die parameter der twitter-Beispiel kann ich berechnen das gleiche Ergebnis wie bei seinem Beispiel, so dass ich denke, meine Methode ist die richtige.
Hier ist meine Berechnung:
String oauth_para = "oauth_callback=" + oauth_callback
+ "&oauth_consumer_key=" + oauth_consumer_key
+ "&oauth_nonce=" + oauth_nonce
+ "&oauth_signature_method=" + oauth_signature_method
+ "&oauth_timestamp=" + oauth_timestamp
+ "&oauth_version=" + oauth_version;
String signingRequests = "POST&" + requestToken + "&" + URLEncoder.encode(oauth_para, "UTF-8");
String key = oauth_consumer_secret + "&";
SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(), "HmacSHA1");
Mac mac = null;
try {
mac = Mac.getInstance("HmacSHA1");
mac.init(signingKey);
}
catch(Exception e) {
System.err.println("Error: " + e);
}
byte[] rawHmac = mac.doFinal(signingRequests.getBytes());
String oauth_signature = Base64.encodeBytes(rawHmac);
oauth_signature = URLEncoder.encode(oauth_signature);
Ich verstehe, dass die nonce und timestamp werden sollten, zufällig und einzigartig. Also, meine Methode ist so:
StringBuffer buffer = new StringBuffer("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");
StringBuffer sb = new StringBuffer();
Random r = new Random();
int range = buffer.length();
for (int i = 0; i < 43;i ++) {
sb.append(buffer.charAt(r.nextInt(range)));
}
long epoch = System.currentTimeMillis() /1000;
String oauth_nonce = sb.toString();
Kann mir jemand helfen?
P. S: ich habe auch entfernt, meine apps, und dann eine neue erstellen. Das Ergebnis ist das gleiche. Auch die apps schreiben und Lesen schon.
- Stellen Sie sicher, dass Ihre Server-Zeit synchronisiert, um innerhalb von fünf Minuten von den Twitter-Servern.
- Wenn Sie bauen Ihr signing requests string was ist der Wert der requestToken? Es sollte leer sein, da dies der erste Schritt des OAuth-Prozess.
- Hatten Sie schon einmal diese arbeiten, Ian? Ich habe die gleichen Probleme (401).
- Bekomme ich diese zu arbeiten plötzlich. Ich denke, es gibt einige Probleme mit der token generiert, bitte überprüfen Sie das token korrekt ist oder nicht. Und Ihre app-Domäne-Konfiguration sollte entsprechend festgelegt werden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
hey,,, ich war immer das gleiche problem 1 min her, aber ich dachte mir, diese. Mein problem, zumindest, war, dass in der Konfiguration der Anwendung(in twitter), meine Bewerbung wurde der Typ Kunde, wenn sein sollte-Browser! So wechselte ich an den Browser, setzen Sie eine callback-URL und fein gearbeitet!!
Callback URL
Feld in den Einstellungen der app. Mehr info unter: stackoverflow.com/a/1994569/193896