Httpclient threadSafeclientConnManager lança “Reset de conexão”
-
20-09-2019 - |
Pergunta
Defino httpclient de 2 maneiras diferentes: 1. Vanilla simples: cliente = new DefaulthttpClient (); 2. Tópico seguro:
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);
}
Em seguida, executei o mesmo teste JUNIT para ambos os tipos de clientes (solicitação simples de obter). #1 Sempre funciona bem, o #2 sempre falha com "java.net.socketexception: redefinição da conexão". A saída de depuração/stacktrace pode ser visto aqui (site fictício)
Eu nunca tenho a chance de fazer nada com o objeto de entidade, já que o erro é lançado no cliente#Execute Ligue. O que estou fazendo de errado aqui?
Solução
AHA! O motivo foi definir HTTPs com fábrica de soquete errada. Deve ser sslsocketfactory
SSLSocketFactory sslSocketFactory = SSLSocketFactory.getSocketFactory();
sslSocketFactory.setHostnameVerifier(SSLSocketFactory.STRICT_HOSTNAME_VERIFIER);
registry.register(new Scheme("https", sslSocketFactory, 443));
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow