android - Specifying a Single Request To Use Credentials with HttpClient -
i using oauth2 on android project. idea use singleton httpclient used threadsafeclientconnmanager.
for normal request server construct authorization header , send that. header constructed values received server. works fine. every 15 minutes must new values server construct header. received these values must set credentials so.
client.getcredentialsprovider().setcredentials( new authscope(authscope.any_host, authscope.any_port), new usernamepasswordcredentials(creds.clientid, creds.clientsecret)); in order work must set , new defaulthttpclient. if use original singleton httpclient receive errors. question is.. possible set credentials used on 1 request?
i noticed there authscope. host , port not suitable maybe realm would? can't find tells me realm or how use it.
06-05 10:12:55.969: w/system.err(23843): org.apache.http.nohttpresponseexception: target server failed respond 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): @ 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): @ 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)
so after more testing have found problem lies.
i want configure pooled connection manager so
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()); but when configure this, error above. if use normal default httpclient so
defaulthttpclient httpclient = new defaulthttpclient(); then works fine. ideas?
as 1 requests needs basic auth credentials, , apparently calling setcredentials() causes error, best might not use credentials provider @ , set basic auth header manually (using setheader() on request) when need it.
edit: here's how should create threadsafe shared httpclient instance:
defaulthttpclient createhttpclient(int timeout) { httpparams params = new basichttpparams(); httpprotocolparams.setcontentcharset(params, http.default_content_charset); httpconnectionparams.setconnectiontimeout(params, timeout); httpprotocolparams.setuseragent(params, "myapp/1.0"); connperroute connperroute = new connperroutebean(10); connmanagerparams.setmaxconnectionsperroute(params, connperroute); connmanagerparams.setmaxtotalconnections(params, 20); schemeregistry schemeregistry = new schemeregistry(); schemeregistry.register(new scheme("http", plainsocketfactory .getsocketfactory(), 80)); final sslsocketfactory sslsocketfactory = sslsocketfactory .getsocketfactory(); schemeregistry.register(new scheme("https", sslsocketfactory, 443)); clientconnectionmanager cm = new threadsafeclientconnmanager(params, schemeregistry); return new defaulthttpclient(cm, params); }
Comments
Post a Comment