某些安卓设备在3G网络下出现HTTPS异常问题

3
这是我的问题:
我想在我的服务器上使用自签名证书进行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包。我使用客户端私钥进行请求。 编辑:我测试了其他SIM卡,很奇怪:一个可以在Nexus S上工作但不在Galaxy S上工作。第二个在所有人身上都很好用。我的结论是:一些运营商可能会限制特定的请求或数据传输。我不知道为什么,我会联系他们以获取更多信息。

编辑2: 解决方案在这里: 如何强制我的应用程序不使用3g数据代理设置


我遇到了类似的问题。我在两部手机上进行了测试(2.3.6和4.0.x),使用相同的sim卡。ICS会出现套接字连接问题。 - slott
1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接