2012-06-15 2 views
3

여기 내 문제가 있습니다 :일부 Android 기기에서 3G의 HTTPS 예외

자체 서명 된 인증서를 사용하여 서버에서 HTTPS 요청을 만들고 싶습니다. Galaxy S2 (v4.0.3), Nexus S (4.0.4), Xperia Ray (4.0.3) 및 Galaxy Ace (2.3.6)에서 WLAN에서 정상적으로 작동합니다.

3G에서 테스트 할 때 Galaxy Ace 및 Xperia Ray에서만 작동합니다. 다른 사람들에게는 내가 Socket is closed: java.net.SocketException입니다.

this page에 해결책을 찾았습니다. 요청 속성이 Connection : close입니다. 하지만이 헤더가 없으면 다른 오류가 발생합니다 : Handshake timeout.

이러한 다양한 결과를 얻기 위해 이러한 장치에서 크게 다를 수있는 것은 무엇입니까?

https 요청의 경우 javax.net.ssl 패키지를 사용합니다. 요청에 클라이언트 개인 키를 사용합니다.

EDIT : 다른 SIM 카드로 테스트했는데 이상한 점이 있습니다. 하나는 Nexus S에서 작동하지만 Galaxy S에서는 작동하지 않습니다. 두 번째로 모든 사람에게 정상적으로 작동합니다. 결론은 다음과 같습니다. 일부 운영자는 특정 요청이나 데이터 전송을 중단 할 수 있습니다. 나는 더 많은 정보

에 연락 드리겠습니다, 왜 모르는

EDIT2 : 여기 솔루션 : how to force my app NOT to use the 3g data proxy setting

+0

나는 비슷한 문제에 직면 해있다. 두 개의 전화 (2.3.6 및 4.0.x)에서 동일한 SIM 카드로 테스트했습니다. ICS는이 소켓 연결 문제를 제공합니다. – slott

답변

3

이 문제는, 당신의 편집에 따라, 실제로 운영자 프록시 설정에 의해 발생합니다.

귀하의 링크는 내 문제를 해결하지만, 의 ProxySelector와 * Proxy.NO_PROXY를 *를 사용하는 방법을 알아내는 약간을했다, 그래서 내가 완벽 여기 내 솔루션을 게시 할 거라고 생각했다.

응용 프로그램의 모든 URI 시도를 무시하고 있습니다. Facebook SDK와 같은 연결을 사용하면 해킹하고 싶지 않을 때 편리합니다.

ProxySelector proxySelector = new ProxySelector() { 

     @Override 
     public List<Proxy> select(URI uri) { 
      List<Proxy> proxies = new ArrayList<Proxy>(); 
      proxies.add(Proxy.NO_PROXY); 
      return proxies; 
     } 

     @Override 
     public void connectFailed(URI uri, SocketAddress address, 
       IOException failure) { 
      // TODO Auto-generated method stub 

     } 
    }; 
    ProxySelector.setDefault(proxySelector);