3

これが私の問題です:

自己署名証明書を使用して、サーバーで 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.

このページで、解決策を見つけました。request プロパティがありましたConnection : close。しかし、このヘッダーがないと、別のエラーが発生します: Handshake timeout.

これらの異なる結果を得るために、これらのデバイスで何が大きく異なるのでしょうか?

https リクエストには、javax.net.sslパッケージを使用します。リクエストにはクライアントの秘密鍵を使用します。

編集:私は他のSIMカードでテストしましたが、それは奇妙です.1つでは、Nexus Sで動作しますが、Galaxy Sでは動作しません.2番目では、誰でも正常に動作します. 私の結論は次のとおりです。一部のオペレーターは、特定の要求またはデータ転送を制止する可能性があります。理由はわかりません。詳細については連絡します

EDIT2: ここで の解決策:アプリが3gデータプロキシ設定を使用しないようにする方法

4

1 に答える 1

3

あなたの編集によると、この問題は確かにオペレーターのプロキシ設定によって引き起こされます。

あなたのリンクは私の問題を解決しましたが、ProxySelectorと* Proxy.NO_PROXY *の使用方法を理解するのに少し時間がかかったので、完全を期すためにここに解決策を投稿したいと思いました。

アプリからのすべてのURI試行をオーバーライドしていることに注意してください。これは、自分でハッキングしたくないFacebookSDKなどを介した接続がある場合に便利です。

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);
于 2013-02-27T10:39:56.773 に答える