문제

나는 두 가지 다른 방식으로 httpclient를 정의합니다. 1. 일반 바닐라 : client = new defaulthttpclient (); 2. 스레드 안전 :

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);
}

그런 다음 두 클라이언트 유형에 대해 동일한 Junit 테스트를 실행합니다 (간단한 GET 요청). #1은 항상 잘 실행되며 #2는 항상 "java.net.socketexception : Connection Reset"으로 실패합니다. 디버그/스택 트레이스 출력이 될 수 있습니다 여기서 보았습니다 (가상 사이트)

클라이언트#Execute Call에서 오류가 발생하기 때문에 엔티티 객체로 아무것도 할 수있는 기회를 얻지 못합니다. 내가 여기서 뭐가 잘못하고 있는가?

도움이 되었습니까?

해결책

아하! 그 이유는 소켓 공장이 잘못된 HTTP를 정의하기 때문입니다. sslsocketfactory 여야합니다

SSLSocketFactory sslSocketFactory = SSLSocketFactory.getSocketFactory();
sslSocketFactory.setHostnameVerifier(SSLSocketFactory.STRICT_HOSTNAME_VERIFIER);
registry.register(new Scheme("https", sslSocketFactory, 443));
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top