2014-12-31 12 views
6

zbudować restAdapter przez to:Jak wysłać żądanie HTTPS przy użyciu funkcji Retrofit?

return new RestAdapter.Builder() 
      .setEndpoint("https://www.xyz.com/") 
      .build() 
      .create(SafeUserApi.class); 

następnie w SafeUserApi.class (który jest interfejsem) mam:

public interface SafeUserApi { 
    @POST("/api/userlogin") 
    void getUserLogin(@Body UserserLogin userLogin, Callback<LoginResult> cb); 
} 

Ale to nie działa. Przegapiłem coś?

Próbowałem z Postmanem i to działa. Ale w moim urządzeniu tak nie jest.

mam te cztery biblioteki importowane:

compile files('libs/okhttp-2.1.0.jar') 
compile files('libs/okhttp-urlconnection-2.1.0.jar') 
compile files('libs/okio-1.0.1.jar') 
compile files('libs/retrofit-1.8.0.jar') 
+0

Jak robi to działa? Podaj symptomy. –

+0

Rozwiązałem to. Nie uwzględniłem magazynu kluczy w moim projekcie. Zajmuje mi to trochę czasu, aby stworzyć gen magazynu kluczy. Użyłem keystoreExplorer do gen magazynu kluczy, to jest bardzo łatwe wif to narzędzie – Derekyy

+0

Mam ten sam problem i moje żądanie modernizacji z błędem: java.security.cert.CertPathValidatorException: nie znaleziono zakotwiczenia zaufania dla ścieżki certyfikatu. – Kenji

Odpowiedz

-2
public interface SafeUserApi { 
    @FormUrlEncoded 
    @POST("/api/userlogin") 
    void getUserLogin(@Field("parm1")UserserLogin userLogin, Callback<LoginResult> cb); 
} 

Tutaj parm1 jest parametr POST że będzie przekazaniem go do serwera. to rozwiąże Twój problem

+0

Pytanie dotyczy głównie korzystania z protokołu HTTPS –

12
public static OkHttpClient getUnsafeOkHttpClient() { 

    try { 
     // Create a trust manager that does not validate certificate chains 
     final TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { 
      @Override 
      public void checkClientTrusted(
        java.security.cert.X509Certificate[] chain, 
        String authType) throws CertificateException { 
      } 

      @Override 
      public void checkServerTrusted(
        java.security.cert.X509Certificate[] chain, 
        String authType) throws CertificateException { 
      } 

      @Override 
      public java.security.cert.X509Certificate[] getAcceptedIssuers() { 
       return new java.security.cert.X509Certificate[0]; 
      } 
     } }; 

     // Install the all-trusting trust manager 
     final SSLContext sslContext = SSLContext.getInstance("TLS"); 
     sslContext.init(null, trustAllCerts, 
       new java.security.SecureRandom()); 
     // Create an ssl socket factory with our all-trusting manager 
     final SSLSocketFactory sslSocketFactory = sslContext 
       .getSocketFactory(); 

     OkHttpClient okHttpClient = new OkHttpClient(); 
     okHttpClient = okHttpClient.newBuilder() 
       .sslSocketFactory(sslSocketFactory) 
       .hostnameVerifier(org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER).build(); 

     return okHttpClient; 
    } catch (Exception e) { 
     throw new RuntimeException(e); 
    } 

} 

To powinno działać:

Retrofit retrofit = new Retrofit.Builder() 
    .baseUrl(YOUR_HTTPS_URL) 
    .setClient(getUnsafeOkHttpClient()) 
    .build(); 
+0

Ostrzeżenie: może atakować użytkowników w publicznym hotspocie Wi-Fi, wykorzystując sztuczki DNS do wysyłania ruchu użytkowników za pośrednictwem własnego serwera proxy, który podszywa się pod serwer. Osoba atakująca może następnie rejestrować hasła i inne dane osobowe. Urządzenie może wygenerować certyfikat i - bez menedżera zaufania, który faktycznie sprawdza, czy certyfikat pochodzi z zaufanego źródła - Twoja aplikacja może komunikować się z kimkolwiek. Więc nie rób tego, nawet tymczasowo. Zawsze możesz uczynić swoją aplikację zaufaniem wystawcy certyfikatu serwera, więc po prostu to zrób. – dhams

Powiązane problemy