gpt4 book ai didi

Android:方案 'http' 未在带代理的 ICS 4.0.4 上注册

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:42:42 25 4
gpt4 key购买 nike

我将 HttpClient 用于 HTTPS 请求,到目前为止它运行良好。升级到 ICS 后,一些用户报告在 3G 连接上出现连接问题。

编辑:他们中的大多数人似乎都在使用代理,我可以使用他们的代理通过 T-Mobile SIM 在本地重现这一点。

日志有这个堆栈跟踪:

java.lang.IllegalStateException: Scheme 'http' not registered.
org.apache.http.conn.scheme.SchemeRegistry.getScheme(SchemeRegistry.java:80)
org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:126)
org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
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)

我们的端点仅为 HTTPS,因此我们不会故意在我们的 SchemeRegistry 中注册 HTTP 端点。没有任何地方 (AFAIK) 我们可以重定向到 HTTP。

下面是为 HTTPS 客户端设置 HttpClient 的代码:

    DefaultHttpClient ret = null;

// sets up parameters
HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, "utf-8");
params.setBooleanParameter("http.protocol.expect-continue", false);

HttpConnectionParams.setConnectionTimeout(params, DEFAULT_CONN_TIMEOUT_MSEC);
HttpConnectionParams.setSoTimeout(params, timeoutMsec);
HttpConnectionParams.setStaleCheckingEnabled(params, true);

SchemeRegistry registry = new SchemeRegistry();
final SocketFactory sslSocketFactory = getPreferredSSLSocketFactory();
registry.register(new Scheme("https", sslSocketFactory, 443));

ThreadSafeClientConnManager manager = new ThreadSafeClientConnManager(params, registry);
ret = new DefaultHttpClient(manager, params);
// for preemptive authentication
// http://dlinsin.blogspot.com/2009/08/http-basic-authentication-with-android.html
ret.addRequestInterceptor(preemptiveAuth, 0);
ret.setCookieStore(communalCookieJar);

SimpleCredentialsProvider credProvider = new SimpleCredentialsProvider(getAccountPreferences());
ret.setCredentialsProvider(credProvider);

return ret;

注意:我们在多个线程之间共享这个 HttpClient 实例。

最佳答案

根据您的堆栈跟踪,我建议您同时注册(http、https),看看这是否行不通。

您应该能够通过包含 apache 源 jar 来调试它 - 向下钻取跟踪 @SchemeRegistry.getScheme()。

This线程可能会有所帮助。

以下在 ICS 上测试正常...androidhttpclient 上的示例 SSL ConnectionMgr库:

static X509TrustManager tm = new X509TrustManager() {

public void checkClientTrusted(X509Certificate[] xcs, String string) throws CertificateException {
}

public void checkServerTrusted(X509Certificate[] xcs, String string) throws CertificateException {
}

public X509Certificate[] getAcceptedIssuers() {
return null;
}
};

MyConnectionManager(SchemeRegistry scheme){
super(scheme);
}

public static MyConnectionManager getInstance() {
if (instance == null){

SSLContext ctx=null;
try {
ctx = SSLContext.getInstance("TLS");
ctx.init(null, new TrustManager[]{tm}, null);
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (KeyManagementException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register( new Scheme("http", 80,PlainSocketFactory.getSocketFactory()));
schemeRegistry.register(new Scheme("https", 443, SSLSocketFactory.getSocketFactory()));
instance = new MyConnectionManager(schemeRegistry);
// Increase max total connection to 200
instance.setMaxTotal(15);
// Increase default max connection per route to 20
instance.setDefaultMaxPerRoute(15);
// Increase max connections for localhost:80 to 50
HttpHost localhost = new HttpHost("picasaweb.google.com", 443);
instance.setMaxForRoute(new HttpRoute(localhost), 10);
}
return instance;
}

关于Android:方案 'http' 未在带代理的 ICS 4.0.4 上注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10352383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com