Jso*_*son 6 android httpclient
我有一个服务器使用spring security remember-me-authentication,我在POST方法中使用Android DefaultHttpClient登录.我能够成功登录甚至能够检索创建的会话cookie(在我的情况下,jsessionid cookie和spring security记住我的cookie).
但奇怪的是在执行POST方法之后
mResponse = mDefaultHttpClient.execute(mHttpPost)
Run Code Online (Sandbox Code Playgroud)
我能够检索cookie,但只能在我的DefaultHttpClient中使用getCookieStore方法
mDefaultHttpClient.getCookieStore()
Run Code Online (Sandbox Code Playgroud)
不使用HttpResponse对象的getAllHeaders方法
headers = mResponse.getAllHeaders();
HeaderIterator headerIterrator = new BasicHeaderIterator(headers, null);
while (headerIterrator.hasNext()) {
Header header = headerIterrator.nextHeader();
headerStringBuilder.append(" " + header.getName() + ":" + header.getValue());
}
Log.e("Post response headers: ", headerStringBuilder.toString());
Run Code Online (Sandbox Code Playgroud)
我在这里得到一些标题(服务器,X-powered-By,日期,内容类型,内容长度)但不是Set-Cookie标题或其他一些(Access-control-Allow-*etc)
谢谢你的帮助!
更新:看起来DefaultHttpClient不会暴露一些标头.我尝试添加响应拦截器(如下所示)和getAllHeaders返回我想要的所有标头.感谢您阅读我的问题!
mDefaultHttpClient.addResponseInterceptor(new HttpResponseInterceptor() {
public void process(final HttpResponse response, final HttpContext context)
throws HttpException, IOException {
Header[] headers = response.getAllHeaders();
for (int i = 0; i < headers.length; i++) {
Header header = headers[i];
Log.e("HTTP: ", "name: " + header.getName());
Log.e("HTTP: ", "value: " + header.getValue());
}
}
});
Run Code Online (Sandbox Code Playgroud)
您是否尝试使用 HttpURLConnection 而不是 HttpClient?HttpClient,顾名思义,是一个客户端,那么它会为你管理cookie,而HttpURLConnection则不会。
Doc 说:“HTTP 客户端封装了执行 HTTP 请求所需的一大堆对象,同时处理 cookie、身份验证、连接管理和其他功能。”
| 归档时间: |
|
| 查看次数: |
3960 次 |
| 最近记录: |