【问题标题】:HTTPS exception in 3G with some Android devices某些 Android 设备的 3G 中的 HTTPS 异常
【发布时间】:2012-06-15 14:41:38
【问题描述】:

这是我的问题:

我想使用自签名证书在我的服务器上发出 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

【问题讨论】:

  • 我遇到了类似的问题。我用相同的 SIM 卡在两部手机(2.3.6 和 4.0.x)上进行了测试。 ICS 给出了这个套接字连接问题。

标签: java android sockets https socketexception


【解决方案1】:

根据您的编辑,这个问题确实是由运营商代理设置引起的。

您的链接解决了我的问题,但花了一点时间弄清楚如何使用 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-09
    • 2015-08-22
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多