使用带有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?
答案 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吗?