AndroidHttpClient和Cookies

时间:2012-06-08 22:39:48

标签: android cookies httpclient httpcontext

使用带有cookie的AndroidHttpClient可以混合使用200 ok和403禁止的响应。我不确定我做错了什么。

我正在以下列方式使用AndroidHttpClient:

我有几个后台线程类,每个类都执行以下操作:

HttpGet get...
HttpClient client = AndroidHttpClient.newInstance("Android");
HttpContext http_context = HttpSupport.getHttpContextInstance(); 
CookieStore cookie_store = HttpSupport.getCookieStoreInstance();
http_context.setAttribute(ClientContext.COOKIE_STORE, cookie_store);
client.execute(

HttpSupport是一个包含两个静态字段的类;一个CookieStore和一个HttpContext:

public class HttpSupport {

private static HttpContext _context;
private static CookieStore _cookieStore;

public static synchronized HttpContext getHttpContextInstance() {
    if (_context == null) {
        _context = new BasicHttpContext();
    }
    return _context;
}

public static synchronized CookieStore getCookieStoreInstance() {
    if (_cookieStore == null) {
        _cookieStore = new BasicCookieStore();
    }
    return _cookieStore;
}

}

在应用程序中有多个AndroidHttpClient实例可以吗?我是否正确存储了cookie?

2 个答案:

答案 0 :(得分:5)

我建议使用Android Asynchronous HTTP Client

它实现了自己的持久性cookie存储(PersistentCookieStore),它非常易于使用。事实上,如果您不想将库用于其异步功能,您可以将它用于它提供的持久性Cookie存储。但是它的异步功能非常值得。

因此,要将它与当前类一起使用,您只需在具有

的HttpSupport类中进行更改即可
public static synchronized CookieStore getCookieStoreInstance(Context context) {
    if (_cookieStore == null) {
        _cookieStore = new PersistentCookieStore(context);
    }
    return _cookieStore;
}

请注意,您必须将方法添加到方法中,因为PersistentCookieStore需要工作。

答案 1 :(得分:1)

HttpClient自动存储我找到的cookie,您应该在异步任务中完成所有这些操作(对于Android 3.0>要求)。

200响应是当所有内容都通过正确发送并且您想要的文件可用时,这不是问题。

403错误非常明显,此服务器是否需要某种类型的登录才能获取文件或网页?这是你应该调查的方法,一种计算如何登录的方法是使用google chrome之类的东西,右键单击网页,去检查元素,然后观察经过的网络文件,登录,查看帖子请求。了解网站的运作方式。

在这里查看异步任务:HTTP POST request ANDROID 4 (working in 2.3)?

我相信你可以有多个HttpClient实例,但要使用相同的cookie,你应该使用一个连接的所有内容

例如:

您应该有一个HttpClient登录,然后使用get请求页面,执行您需要做的事情等。


抱歉,我放心你使用AndriodHttpClient而不是HttpClient,AndroidHttpClient默认不存储cookie所以是的,你有什么理由在HttpClient上使用AndroidHttpClient吗?