2017-09-25 8 views
0

J'ai été en mesure de suivre la danse oauth jusqu'à la toute dernière étape: J'ai un jeton de demande et un vérificateur oauth est renvoyé à mon application Android après que l'utilisateur a authentifié l'application dans le navigateur. Malheureusement, je ne suis pas en mesure d'acquérir le jeton d'accès final. C'est ce que j'essaie de faire dans cette toute dernière étape:Http erreur de connexion lors de la demande de jeton d'accès pour wordpress oauth1.0a en utilisant scribejava

// use the parameter your API exposes for the verifier 
String oauthVerifier = uri.getQueryParameter("oauth_verifier"); 

// get requestToken from shared preferences 
SharedPreferences sharedPref = this.getPreferences(Context.MODE_PRIVATE); 
OAuth1RequestToken requestToken = new OAuth1RequestToken(
     sharedPref.getString("WP_OAuthToken",""), 
     // sharedPref.getString("WP_OAuthTokenSecret","") 
     oauthVerifier 
); 

// request accessToken from API 
OAuth1AccessToken accessToken = null; 
try { 
    accessToken = service.getAccessToken(requestToken, oauthVerifier); 
} ... 

La toute dernière ligne ne fonctionne pas ici. logcat me dit

Caused by: android.os.NetworkOnMainThreadException 
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1303) 
at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:86) 
at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:74) 
at java.net.InetAddress.getAllByName(InetAddress.java:752) 
at com.android.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29) 
at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:187) 
at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:156) 
at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:98) 
at com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:345) 
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:328) 
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:246) 
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:457) 
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:126) 
at com.github.scribejava.core.httpclient.jdk.JDKHttpClient.doExecute(JDKHttpClient.java:104) 
at com.github.scribejava.core.httpclient.jdk.JDKHttpClient.execute(JDKHttpClient.java:72) 
at com.github.scribejava.core.oauth.OAuthService.execute(OAuthService.java:104) 
at com.github.scribejava.core.oauth.OAuth10aService.getAccessToken(OAuth10aService.java:99) 
at com.example.******.*********.LoginActivity.onResume(LoginActivity.java:132) 

.LoginActivity.onResume(LoginActivity.java:132) est la dernière ligne de code ci-dessus. Dans la ligne 104 du JDKHttpClient.java, il est tenté d'exécuter connection.connect(); sur final HttpURLConnection connection = (HttpURLConnection) new URL(completeUrl).openConnection();. C'est le point où mon application tombe en panne, lorsque j'essaie de déboguer l'erreur. La sortie de débogage est quelque chose comme

this = {[email protected]} 
userAgent = null 
headers = {[email protected]} size = 1 
0 = {[email protected]} "Authorization" -> "OAuth oauth_consumer_key="pxKsS2wdw4uvPPR", oauth_signature_method="HMAC-SHA1", oauth_version="1.0", oauth_timestamp="1506338204", oauth_nonce="292945226", oauth_verifier="DrZUpDOsdTN3nOUcP0ZIEsclBYx6", oauth_token="weCu9ejOkmOX9D4zB9zL62XESpe23Q", oauth_signature="%2B%2FV%2FwkmFFaFfmb%2Fc%3D"" 
httpVerb = {[email protected]} "POST" 
completeUrl = "http://***wordpresspage***.de/oauth1/access" 
bodyType = {[email protected]} "BYTE_ARRAY" 
bodyContents = {byte[0]@4926} 
connection = {[email protected]} "com.android.okhttp.internal.huc.HttpURLConnectionImpl:http://***wordpresspage***.de/oauth1/access" 
client = {[email protected]} 
fixedContentLength = -1 
followUpCount = 0 
handshake = null 
httpEngine = null 
httpEngineFailure = null 
requestHeaders = {[email protected]} 
    namesAndValues = {[email protected]} size = 6 
    0 = "Authorization" 
    1 = "OAuth oauth_consumer_key="pxKsS2wdw4uvPPR", oauth_signature_method="HMAC-SHA1", oauth_version="1.0", oauth_timestamp="1506338204", oauth_nonce="292945226", oauth_verifier="DrZUpDOsdTN3nOUcP0ZIEsclBYx6", oauth_token="weCu9ejOkmOX9D4zB9zL62XESpe23Q", oauth_signature="%2B%2FV%2FwkmFFaFfmb%2Fc%3D"" 
    2 = "Content-Length" 
    3 = "0" 
    4 = "Content-Type" 
    5 = "application/x-www-form-urlencoded" 
    shadow$_klass_ = {[email protected]} "class com.android.okhttp.Headers$Builder" 
    shadow$_monitor_ = -1963988711 
responseHeaders = null 
route = null 
urlFilter = {[email protected]} 
chunkLength = -1 
HttpURLConnection.fixedContentLength = -1 
fixedContentLengthLong = -1 
instanceFollowRedirects = true 
method = "POST" 
responseCode = -1 
responseMessage = null 
allowUserInteraction = false 
connectTimeout = 0 
connected = false 
doInput = true 
doOutput = false 
ifModifiedSince = 0 
readTimeout = 0 
requests = null 
url = {[email protected]} "http://***wordpresspage***.de/oauth1/access" 
    authority = "***wordpresspage***.de" 
    file = "/oauth1/access" 
    handler = {[email protected]} 
    hashCode = -1 
    host = "***wordpresspage***.de" 
    hostAddress = null 
    path = "/oauth1/access" 
    port = -1 
    protocol = "http" 
    query = null 
    ref = null 
    userInfo = null 
    shadow$_klass_ = {[email protected]} "class java.net.URL" 
    shadow$_monitor_ = -2041726017 
useCaches = true 
shadow$_klass_ = {[email protected]} "class com.android.okhttp.internal.huc.HttpURLConnectionImpl" 
shadow$_monitor_ = -1950688533 

Je ne légèrement changé les informations d'identification, car je ne veux pas d'informations sur mon site en cours de publication.

Je m'attendrais à ce que la connexion ci-dessus soit réussie et en outre de rendre le jeton d'accès pour mon api wordpress. Lorsque j'envoie les mêmes informations d'identification dans Postman, la demande aboutit. Alors, où est le problème, quand j'utilise scribejava? Est-ce parce que scribejava envoie le oauth_verifier dans l'en-tête de la requête et dans Postman vous pouvez l'envoyer comme paramètre url?

Répondre

0

Selon les journaux:

Caused by: android.os.NetworkOnMainThreadException 

vous appelez les méthodes api de service sur le thread principal, essayez d'utiliser AsyncTask pour gérer les requêtes réseau.

+0

Gosh .. Merci pour la réponse rapide! Maintenant ça marche .. –