当前位置: 首页 > 面试题库 >

Android HttpClient和Cookies

喻昀
2023-03-14
问题内容

我在Android中的HttpClient遇到问题:通过使用以下代码,我想使用通过Web视图登录之前已设置的cookie。因此,登录数据应该存在并且确实存在,我对此进行了测试。但是,当我在httppost或httpget中使用cookie时,它不使用登录数据。但是这些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。

预先感谢您的帮助

蒂莫问候


问题答案:

我遇到了同样的问题,并且使用了与问题类似的方法,但是没有运气。对我来说起作用的是为每个复制的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);
 ...


 类似资料:
  • 问题内容: 两者之间有很大的区别,最好使用哪一个? 问题答案: :Apache的子类,配置了合理的默认设置和Android的注册方案,并允许用户添加类。该客户端处理cookie,但默认情况下不保留它们。要保留Cookie,只需将Cookie存储添加到 [ API ]

  • 问题内容: 问:当使用AndroidHttpClient通过HTTPS发出REST请求时,如何指定要使用的SSL协议和密码? 这个很重要。众所周知,在服务器上可以做很多事情,但是有很多限制。同一台服务器必须为包括旧浏览器在内的浏览器以及其他客户端提供服务。这意味着服务器必须支持各种协议和密码。即使在Android中,如果您必须支持许多不同的版本,则也将必须支持许多不同的协议和密码。 更重要的是,默

  • 本文向大家介绍AndroidHttpClient详解及调用示例,包括了AndroidHttpClient详解及调用示例的使用技巧和注意事项,需要的朋友参考一下 下面给大家展示了AndroidHttpClient结构: public final class AndroidHttpClient extends Object implements HttpClient 前言: 这类其实是Google对阿

  • Sessions 和 cookies 允许数据在多次请求中保持, 在纯 PHP 中,可以分别使用全局变量 $_SESSION 和 $_COOKIE 来访问,Yii 将 session 和 cookie 封装成对象并增加一些功能, 可通过面向对象方式访问它们。 Sessions 和 请求 和 响应类似, 默认可通过为 yii\web\Session 实例的 session 应用组件 来访问 sess

  • 问题内容: 我已经成功使用httpclient成功登录到站点,并打印出启用该登录的cookie。但是,我现在陷入困境,因为我想使用.setPage(url)函数在JEditorPane中显示后续页面。但是,当我这样做并使用Wireshark分析我的GET请求时,我看到用户代理不是我的httpclient而是以下内容: 用户代理:Java / 1.6.0_17 GET请求(在侧面jeditorpan

  • 问题内容: 关于它们有很多传说。我想知道真相。以下两个示例之间有什么区别? 问题答案: 不确定从何处获得传说,但: 提交按钮 与: IE6将在标记之间提交此按钮的所有文本,其他浏览器将仅提交值。使用可使您在按钮的设计上享有更大的布局自由度。从各种意图和目的看,它乍一看似乎很棒,但是各种浏览器怪癖使它有时很难使用。 在您的示例中,IE6将发送到服务器,而其他大多数浏览器将不发送任何内容。要使其跨浏览