AndroidHttpClient和Cookies

AndroidHttpClient和Cookies,android,cookies,httpclient,httpcontext,Android,Cookies,Httpclient,Httpcontext,将AndroidHttpClient与Cookie一起使用会给我混合200个ok和403个禁止响应。我不确定我做错了什么 我以以下方式使用AndroidHttpClient: 我有几个后台线程类,每个类都执行以下操作: HttpGet get... HttpClient client = AndroidHttpClient.newInstance("Android"); HttpContext http_context = HttpSupport.getHttpContextInstance()

将AndroidHttpClient与Cookie一起使用会给我混合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?

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

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

403错误很明显,这个服务器需要某种类型的登录才能获取文件或网页吗?这就是你应该调查的,一种解决如何登录的方法是使用谷歌chrome之类的东西,右键点击网页,去检查元素,然后观察网络文件通过,登录,观察帖子请求。了解网站的工作原理

在此处查看异步任务:

我相信您可以有多个HttpClient实例,但是要使用相同的cookie,您应该为连接的所有对象使用一个cookie

例如:

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



抱歉,我重申了您使用的是AndriodHttpClient而不是HttpClient,AndroidHttpClient默认情况下不存储Cookie,所以是的,您为什么要在HttpClient上使用AndroidHttpClient?

HttpClient自动存储我发现的Cookie,您真的应该在异步任务中完成这一切(对于Android 3.0>要求)

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

403错误很明显,这个服务器需要某种类型的登录才能获取文件或网页吗?这就是你应该调查的,一种解决如何登录的方法是使用谷歌chrome之类的东西,右键点击网页,去检查元素,然后观察网络文件通过,登录,观察帖子请求。了解网站的工作原理

在此处查看异步任务:

我相信您可以有多个HttpClient实例,但是要使用相同的cookie,您应该为连接的所有对象使用一个cookie

例如:

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



抱歉,我再次确认您使用的是AndroidHttpClient而不是HttpClient,AndroidHttpClient默认情况下不存储Cookie,所以是的,您使用AndroidHttpClient而不是HttpClient的原因是什么?

我建议使用

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

因此,要在当前类中使用它,您只需在您的HttpSupport类中做一个更改即可

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

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

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

因此,要在当前类中使用它,您只需在您的HttpSupport类中做一个更改即可

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


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

我认为要使用HttpClient,您需要导入Apache库。我使用多个客户端,因为我有多个线程发出请求。我不需要导入Apache库?你不能从所有线程对客户端和客户端进行静态引用吗?我现在这样做,但仍然得到403和200的混合:/I我使用的是单例,而不是静态客户端。顺便说一句,我认为要使用HttpClient,你需要导入Apache库。我使用多个客户端,因为我有多个线程发出请求。我不需要导入Apache库?你不能从所有线程对客户端和客户端进行静态引用吗?我现在这样做,但仍然得到403和200的混合:/I我使用的是单例,而不是静态客户端。顺便说一句,请给出否决投票的原因。我正在使用AndroidHttpClient和前面提到的cookie存储,并发现这个库中的持久cookie存储运行良好。另一个显而易见的解决方案是不使用android httpclient,而是使用DefaultHttpClient,正如这里所描述的那样,这意味着一个投票结果-——我想改变它,但它不允许我。编辑一些类型以便我可以?谢谢:)没关系。虽然不是一个很好的答案,但我只是觉得不值得投反对票。2分虽然没有多大伤害。我认为OP真的应该尝试使用这个库(用于cookie存储和使用异步http调用来简化他的应用程序)。。它似乎完全支持http身份验证。我不推荐android异步http。有一段时间,它对我来说运行良好,但今天突然开始抛出随机故障,比如忽略HTTP错误,当无法访问远程服务器时进入无限循环。我实际上不使用它,但我使用它的cookie存储。。可能是杀伤力过大,但效果很好。请给出投票失败的原因。我正在与一起使用AndroidHttpClient