2012-06-15 56 views
3

這是我的問題:在某些Android設備的3G中的HTTPS例外

我想使用自簽名證書在我的服務器上發出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

我面臨類似的問題。我使用相同的SIM卡在兩部手機(2.3.6和4.0.x)上進行了測試。 ICS提供了此套接字連接問題。 – slott

回答

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); 
相關問題