我在我的 android 项目上使用 OAuth2。这个想法是使用与 ThreadSafeClientConnManager 一起使用的单例 HttpClient。
对于对服务器的正常请求,我们构造一个 Authorization 标头并发送它。标头是根据从服务器接收到的值构造的。这工作正常。然而,每 15 分钟,我们必须从服务器获取新值来构造标头。要接收这些值,我必须像这样设置凭据。
client.getCredentialsProvider().setCredentials(
new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT),
new UsernamePasswordCredentials(creds.clientId, creds.clientSecret));
为了使它工作,我必须设置和新的 DefaultHttpClient。如果我使用原始的单例 httpclient,我会收到一些错误。我的问题是.. 是否可以将凭据设置为仅用于这一请求?
我注意到有一个 AuthScope。主机和端口不适合这个,但也许领域会?我找不到任何能告诉我领域是什么或如何使用它的东西。
06-05 10:12:55.969: W/System.err(23843): org.apache.http.NoHttpResponseException: 目标服务器未能响应 06-05 10:12:55.969: W/System.err(23843):在 org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:85) 06-05 10:12:55.969: W/System.err(23843): 在 org.apache.http.impl.io。 AbstractMessageParser.parse(AbstractMessageParser.java:174) 06-05 10:12:55.969: W/System.err(23843): at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:179) 06-05 10:12:55.969: W/System.err(23843): 在 org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:235) 06-05 10:12:55.969: W/System.err (23843): 在 org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:259) 06-05 10:12:55.975: W/System.err(23843): 在 org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:279) 06-05 10:12:55.975: W/ System.err(23843): 在 org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:121) 06-05 10:12:55.975: W/System.err(23843): 在 org.apache.http .impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:504) 06-05 10:12:55.975: W/System.err(23843): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient. java:555) 06-05 10:12:55.975: W/System.err(23843): 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 06-05 10:12: 55.975: W/System.err(23843): 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)错误(23843):在 org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:279)06-05 10:12:55.975:W/System.err(23843):在 org.apache.http.protocol .HttpRequestExecutor.execute(HttpRequestExecutor.java:121) 06-05 10:12:55.975: W/System.err(23843): 在 org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:504) 06-05 10:12:55.975: W/System.err(23843): 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 06-05 10:12:55.975: W/ System.err(23843): 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 06-05 10:12:55.975: W/System.err(23843): 在 org.apache .http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)错误(23843):在 org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:279)06-05 10:12:55.975:W/System.err(23843):在 org.apache.http.protocol .HttpRequestExecutor.execute(HttpRequestExecutor.java:121) 06-05 10:12:55.975: W/System.err(23843): 在 org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:504) 06-05 10:12:55.975: W/System.err(23843): 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 06-05 10:12:55.975: W/ System.err(23843): 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 06-05 10:12:55.975: W/System.err(23843): 在 org.apache .http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)doReceiveResponse(HttpRequestExecutor.java:279) 06-05 10:12:55.975: W/System.err(23843): 在 org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:121) 06-05 10: 12:55.975: W/System.err(23843): 在 org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:504) 06-05 10:12:55.975: W/System.err(23843 ): 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 06-05 10:12:55.975: W/System.err(23843): 在 org.apache.http.impl。 client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 06-05 10:12:55.975: W/System.err(23843): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465 )doReceiveResponse(HttpRequestExecutor.java:279) 06-05 10:12:55.975: W/System.err(23843): 在 org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:121) 06-05 10: 12:55.975: W/System.err(23843): 在 org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:504) 06-05 10:12:55.975: W/System.err(23843 ): 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 06-05 10:12:55.975: W/System.err(23843): 在 org.apache.http.impl。 client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 06-05 10:12:55.975: W/System.err(23843): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465 )执行(HttpRequestExecutor.java:121)06-05 10:12:55.975:W/System.err(23843):在 org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:504)06-05 10:12:55.975: W/System.err(23843): 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 06-05 10:12:55.975: W/System.err (23843): 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 06-05 10:12:55.975: W/System.err(23843): 在 org.apache.http。 impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)执行(HttpRequestExecutor.java:121)06-05 10:12:55.975:W/System.err(23843):在 org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:504)06-05 10:12:55.975: W/System.err(23843): 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 06-05 10:12:55.975: W/System.err (23843): 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 06-05 10:12:55.975: W/System.err(23843): 在 org.apache.http。 impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)java:555) 06-05 10:12:55.975: W/System.err(23843): 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 06-05 10:12: 55.975: W/System.err(23843): 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)java:555) 06-05 10:12:55.975: W/System.err(23843): 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 06-05 10:12: 55.975: W/System.err(23843): 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
因此,经过更多测试,我发现了问题所在。
我想像这样配置一个池连接管理器
SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(
new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
schemeRegistry.register(
new Scheme("https", PlainSocketFactory.getSocketFactory(), 443));
ClientConnectionManager conManager = new ThreadSafeClientConnManager(new BasicHttpParams(), schemeRegistry);
DefaultHttpClient httpClient = new DefaultHttpClient(conManager, new BasicHttpParams());
但是当像这样配置时,我得到了上面的错误。如果我像这样使用正常的默认httpclient
DefaultHttpClient httpClient = new DefaultHttpClient();
然后它工作正常。有任何想法吗?