我的Android中的HttpClient存在问题:通过使用以下代码,我想通过webview登录来使用之前已设置的cookie。所以登录数据应该在那里,确实存在,我测试了它。但是当我在httppost或httpget中使用cookie时,它不使用登录数据。但这些cookie实际上应该足以接收需要登录的页面,不应该这样吗?我不确定是否需要以特殊方式将cookie发送到服务器,或者是否足以将其加载到httpcontext中。这是代码:
DefaultHttpClient httpclient = new DefaultHttpClient();
CookieStore lCS = new BasicCookieStore();
if (CookieManager.getInstance().getCookie(pUrl) != null) {
String cookieString = CookieManager.getInstance().getCookie(pUrl);
String[] urlCookieArray = cookieString.split(";");
for (int i = 0; i < urlCookieArray.length; i++) {
System.out.println(urlCookieArray[i]);
String[] singleCookie = urlCookieArray[i].split("=");
Cookie urlCookie = new BasicClientCookie(singleCookie[0], singleCookie[1]);
lCS.addCookie(urlCookie);
}
}
HttpContext localContext = new BasicHttpContext();
httpclient.setCookieStore(lCS);
localContext.setAttribute(ClientContext.COOKIE_STORE, lCS);
HttpPost httppost = new HttpPost(pUrl);
// get the url connection
try {
StringBuilder sb = new StringBuilder();
HttpResponse response = httpclient.execute(httppost, localContext);
InputStream is = response.getEntity().getContent();
InputStreamReader isr = new InputStreamReader(is);
如果我运行代码我只收到该网站的登录页面,所以它不接受cookie。
提前感谢您的帮助
Greets,timo
答案 0 :(得分:8)
我遇到了同样的问题,我在问题中使用了类似的方法而没有运气。 使它适用于我的是为每个复制的cookie添加域。 (BasicClientCookie cookie.setDomain(String))
我的工具功能:
public static BasicCookieStore getCookieStore(String cookies, String domain) {
String[] cookieValues = cookies.split(";");
BasicCookieStore cs = new BasicCookieStore();
BasicClientCookie cookie;
for (int i = 0; i < cookieValues.length; i++) {
String[] split = cookieValues[i].split("=");
if (split.length == 2)
cookie = new BasicClientCookie(split[0], split[1]);
else
cookie = new BasicClientCookie(split[0], null);
cookie.setDomain(domain);
cs.addCookie(cookie);
}
return cs;
}
String cookies = CookieManager.getInstance().getCookie(url);
BasicCookieStore lCS = getCookieStore(cookies, MyApp.sDomain);
HttpContext localContext = new BasicHttpContext();
DefaultHttpClient httpclient = new DefaultHttpClient();
httpclient.setCookieStore(lCS);
localContext.setAttribute(ClientContext.COOKIE_STORE, lCS);
...
答案 1 :(得分:0)
您似乎正在正确复制Cookie,通常您不需要为HttpClient执行任何特殊操作来发送Cookie。但是,其中一些可能绑定到会话,当您使用HttpClient打开新连接时,您将打开一个新会话。服务器可能会忽略与当前会话不匹配的cookie。如果会话ID在cookie中并且您能够进入同一会话,则可能可以工作,但您确实需要知道服务器的确切功能。
答案 2 :(得分:0)
如果您仍有这个问题,请小心使用给定的Cookie,有些可能会格式不正确,请检查这两个网站:
http://www.codeproject.com/Articles/3106/On-The-Care-and-Handling-of-Cookies
这个人帮助了我: Getting "Set-Cookie" header