2009-08-27 4 views
1

Je définis HttpClient de 2 manières différentes: 1. Plain vanilla: client = new DefaultHttpClient(); 2. thread-safe:HttpClient ThreadSafeClientConnManager throws "Connexion réinitialisée"

DefaultHttpClient getThreadSafeHttpClient() { 
    HttpParams params = new BasicHttpParams(); 
    params 
      .setParameter(
        "http.useragent", 
        "Mozilla/5.0 (Linux; U; Android 1.1; en-us;dream) AppleWebKit/525.10+ (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2"); 
    HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); 
    HttpProtocolParams.setContentCharset(params, "UTF-8"); 
    final SchemeRegistry registry = new SchemeRegistry(); 
    registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); 
    registry.register(new Scheme("https", PlainSocketFactory.getSocketFactory(), 443)); 
    final ThreadSafeClientConnManager manager = new ThreadSafeClientConnManager(params, 
      registry); 
    return new DefaultHttpClient(manager, params); 
} 

Puis je lance même test JUnit pour les deux types de clients (demande GET simple). # 1 fonctionne toujours bien, # 2 échoue toujours avec "java.net.SocketException: Connection reset". La sortie de débogage/stacktrace peut être seen here (site fictif)

Je n'ai jamais l'occasion de faire quoi que ce soit avec un objet entité car une erreur est lancée sur le client # execute call. Qu'est-ce que je fais mal ici?

Répondre

2

Aha! La raison était de définir HTTPS avec une mauvaise usine de socket. Il doit être SSLSocketFactory

SSLSocketFactory sslSocketFactory = SSLSocketFactory.getSocketFactory(); 
sslSocketFactory.setHostnameVerifier(SSLSocketFactory.STRICT_HOSTNAME_VERIFIER); 
registry.register(new Scheme("https", sslSocketFactory, 443)); 
Questions connexes