首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AndroidHttpClient和Cookie

AndroidHttpClient和Cookie
EN

Stack Overflow用户
提问于 2012-06-09 06:39:48
回答 2查看 3.6K关注 0票数 0

使用带有cookies的AndroidHttpClient时,我混合了200OK和403禁止响应。我不确定我做错了什么。

我以以下方式使用AndroidHttpClient:

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

代码语言:javascript
复制
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:

代码语言:javascript
复制
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实例吗?我是否正确地存储了cookies?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-12 05:29:09

HttpClient会自动存储我找到的3.0>,你真的应该在一个异步任务中完成这一切(对于Android cookie的要求)。

200的响应是当所有东西都已正确发送,并且您想要的文件对您可用时,这不是问题。

403错误非常明显,此服务器是否需要某种类型的登录才能获取文件或网页?这就是你应该调查的,弄清楚如何登录的一种方法是使用类似google chrome的东西,在网页上右击,检查元素,然后查看网络文件,登录,查看post请求。了解该网站的工作原理。

看一下这里的异步任务:HTTP POST request ANDROID 4 (working in 2.3)?

我相信您可以有多个HttpClient实例,但要使用相同的cookies,您应该将其中一个用于连接的所有内容

例如:

你应该有一个HttpClient来登录,然后使用get请求一个页面,做任何你需要做的事情,等等。

抱歉,我很抱歉你使用的是AndriodHttpClient而不是HttpClient,AndroidHttpClient默认不会存储cookie,所以,你为什么要使用AndroidHttpClient而不是HttpClient呢?

票数 1
EN

Stack Overflow用户

发布于 2012-06-12 05:41:02

我建议您使用Android Asynchronous HTTP Client

它实现了自己的持久性cookie存储(PersistentCookieStore),这非常容易使用。事实上,如果您不想将该库用于其异步功能,则可以将其用于它提供的持久性Cookie Store。然而,它的异步能力是非常有价值的。

因此,要在当前类中使用它,只需在HttpSupport类中进行如下更改即可

代码语言:javascript
复制
public static synchronized CookieStore getCookieStoreInstance(Context context) {
    if (_cookieStore == null) {
        _cookieStore = new PersistentCookieStore(context);
    }
    return _cookieStore;
}

请注意,您必须将上下文添加到方法中,因为它是PersistentCookieStore工作所必需的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10956820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档