【问题标题】:HTTP proxy not working on HTC desire running android 2.2HTTP 代理无法在 HTC 上运行 android 2.2
【发布时间】:2013-02-28 15:05:50
【问题描述】:

我正在使用使用以下代码的 HTTP 代理:

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

这在多个运行 android 2.3 及更高版本的 Android 设备上运行良好。但是,当我在运行 android 2.2.2 的 HTC 愿望上尝试此操作时,出现以下异常:

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)

以前有人见过这种行为吗?谢谢!

【问题讨论】:

    标签: android http proxy


    【解决方案1】:

    正如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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多