2014-04-21 8 views
10

ho avuto il seguente codice, che compila ancora, ma sono tutti deprecato:HttpClient 4.3.x, fissando il codice deprecato da usare implementazioni attuali HttpClient

SSLSocketFactory sslSocketFactory = new SSLSocketFactory(context, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); 
ClientConnectionManager clientConnectionManager = base.getConnectionManager(); 
SchemeRegistry schemeRegistry = clientConnectionManager.getSchemeRegistry(); 
schemeRegistry.register(new Scheme("https", 443, sslSocketFactory)); 
return new DefaultHttpClient(clientConnectionManager, base.getParams()); 

Ho fatto del mio meglio per sostituirlo con questa porzione del codice:

HttpClientBuilder builder = HttpClientBuilder.create(); 
SSLConnectionSocketFactory sslConnectionFactory = new SSLConnectionSocketFactory(context, SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); 
builder.setConnectionManager(new BasicHttpClientConnectionManager()); 
builder.setSSLSocketFactory(sslConnectionFactory); 
return builder.build(); 

come si può vedere, ci sono poche righe di codice dal posto in alto che non so come includere sulla nuova porzione. Come posso aggiungere il codice necessario, ad esempio un SchemeRegistry alternativo?

+0

Ebbene, la deprecazione di SchemeRegistry dice "deprecato. (4.3) usare Registro di sistema" – jedison

+0

lo so già. Come si usa 'Registry' dato che si tratta di una mappa di ricerca? –

risposta

13
HttpClientBuilder builder = HttpClientBuilder.create(); 
SSLConnectionSocketFactory sslConnectionFactory = new SSLConnectionSocketFactory(context, SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); 
builder.setSSLSocketFactory(sslConnectionFactory); 

Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create() 
     .register("https", sslConnectionFactory) 
     .build(); 

HttpClientConnectionManager ccm = new BasicHttpClientConnectionManager(registry); 

builder.setConnectionManager(ccm); 

return builder.build(); 
+0

@Buhake Sindi hai provato la mia risposta? – herau

+1

Ho fatto davvero. Avrò bisogno di testare però. –

+0

Per me è lavoro in produzione da poche settimane – herau

12

Non posso ancora commentare, ma ecco un piccolo aggiornamento alla risposta di herau dato che è deprecato dal 4.4, forse qualcuno lo troverà utile.

SSLConnectionSocketFactory sslConnectionFactory = new SSLConnectionSocketFactory(context, NoopHostnameVerifier.INSTANCE); 
+0

Ho questo codice legacy, 'HttpPost richiesta = null;' ' HttpResponse risposta = null;' Poi in fondo 'richiesta = new HttpPost (var);' ' risposta = client.execute (richiesta); ' Qual è la sostituzione per questo? – Wax