0

次のコードを使用してHTTPプロキシを使用しています。

DefaultHttpClient client = new DefaultHttpClient();
HttpHost proxy = new HttpHost(proxyHost, proxyPort, "http");
client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);

これは、すべてandroid2.3以降を実行しているいくつかのandroidデバイスで正常に機能します。ただし、Android2.2.2を実行しているHTCDesireでこれを試してみると、次の例外が発生します。

java.lang.IllegalArgumentException
java.net.InetSocketAddress.<init>(InetSocketAddress.java:98)
java.net.InetSocketAddress.<init>(InetSocketAddress.java:89)
org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.<init>(OpenSSLSocketImpl.java:238)
org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImplWrapper.<init>(OpenSSLSocketImplWrapper.java:35)
org.apache.harmony.xnet.provider.jsse.OpenSSLSocketFactoryImpl.createSocket(OpenSSLSocketFactoryImpl.java:83)
de.bahn.android.ris.communication.http.EasySSLSocketFactory.createSocket(EasySSLSocketFactory.java:136)
org.apache.http.impl.conn.DefaultClientConnectionOperator.updateSecureConnection(DefaultClientConnectionOperator.java:225)
org.apache.http.impl.conn.AbstractPoolEntry.layerProtocol(AbstractPoolEntry.java:302)
org.apache.http.impl.conn.AbstractPooledConnAdapter.layerProtocol(AbstractPooledConnAdapter.java:146)
org.apache.http.impl.client.DefaultRequestDirector.establishRoute(DefaultRequestDirector.java:623)
org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:352)
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)

誰かが以前にこの振る舞いを見たことがありますか?ありがとう!

4

1 に答える 1

0

https://android-review.googlesource.com/#/c/15755/に記載されているように、これはある時点で、おそらく2.2以降に解決されたバグのようです。私はここでこれに対する解決策を見つけましたhttp://code.google.com/p/android/issues/detail?id=2690、これは置き換えることです

HttpResponse response = httpclient.execute(httpRequest);

int port = httpRequest.getURI().toString().startsWith("https") ? 443 : 80;
HttpHost host = new HttpHost(httpRequest.getURI().getHost(), port, httpRequest.getURI().getScheme());
HttpResponse response = httpclient.execute(host, httpRequest);

どうやら問題は、ポートが正しく設定されておらず、InetSocketAddressで0に設定されていたことでした。

于 2013-03-01T13:55:05.807 に答える