这是我的问题:
我想使用自签名证书在服务器上发出HTTPS请求.在WLAN上与Galaxy S2(v4.0.3),Nexus S(4.0.4),Xperia Ray(4.0.3)和Galaxy Ace(2.3.6)配合使用时效果很好.
在3G中进行测试时,它仅适用于Galaxy Ace和Xperia Ray.在其他我得到的套接字已关闭:java.net.SocketException.
在this page上,我找到了解决方案.我有一个请求属性Connection:关闭.但是没有此标头,我会收到另一个错误:握手超时.
这些设备在获得这些不同结果方面可能有何不同?
对于https请求,我使用javax.net.ssl包.我为请求使用客户端私钥.
编辑:我用其他SIM卡进行了测试,这很奇怪:使用一张SIM卡,它可以在Nexus S上运行,但不能在银河S上使用.使用第二张,对所有人都可以正常运行.我的结论是:某些运算符可能会捆绑特定的请求或数据传输.我不知道为什么,我会与他们联系以获取更多信息
编辑2:
解决方案在这里:
how to force my app NOT to use the 3g data proxy setting
解决方法:
根据您的编辑,此问题确实是由运算符代理设置引起的.
您的链接解决了我的问题,但是花了点时间弄清楚如何使用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);