这是我的问题:
我想使用自签名证书在我的服务器上发出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
答案 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);