我有一個服務器使用spring安全記憶我認證,我在POST方法中使用Android DefaultHttpClient登錄。 我能夠成功登錄,甚至能夠檢索創建的會話cookie(在我的情況下jsessionid cookie和春季安全記得我cookie)。Android DefaultHttpClient HttpResponse缺少Set-Cookie標頭字段
但奇怪的是執行POST方法類似
mResponse = mDefaultHttpClient.execute(mHttpPost)
我能夠檢索的cookies,但只使用getCookieStore方法在我DefaultHttpClient如不使用getAllHeaders方法
mDefaultHttpClient.getCookieStore()
後的HttpResponse對象
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());
我得到了一些hea (服務器,X-powered-By,日期,內容類型,內容長度)但不包括Set-Cookie頭或其他幾個(訪問控制 - 允許等*)
感謝任何幫助!
更新:看起來像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());
}
}
});
你可以嘗試的例子在我的問題在這裏:http://stackoverflow.com/questions/3858593/android-http-get-session-cookie看看你得到了同樣的問題 – Blundell
@Blundell,感謝您的評論,是的,我試過這個例子,但只是與上面相同的一組頭文件返回。 – Json
我認爲在實際請求期間會填充一些標題,特別是那些可能具有有限生命週期的標題。 – njzk2