与一些Android设备在3G中的HTTPS异常

时间:2012-06-15 14:41:39

标签: java android sockets https socketexception

这是我的问题:

我想使用自签名证书在我的服务器上发出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.还有一个适用于所有人。我的结论是:一些运营商可能会特定请求或数据转移。我不知道为什么,我会联系他们获取更多信息

EDIT2: 解决方案: how to force my app NOT to use the 3g data proxy setting

1 个答案:

答案 0 :(得分: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);