2011-06-15 55 views
20

我正在尝试做一个支持cookie的URLConnection。根据该文件,我可以使用:使用Cookie进行URLConnection?

CookieManager cookieManager = new CookieManager(); 
CookieHandler.setDefault(cookieManager); 

我无法获得此代码工作,然后我看到了API 9(2.3)这仅适用。但是,我没有在旧模拟器中使用CookieManager发生错误,CookieManager存在,但无法构建。有没有什么办法可以为早期版本做这项工作?我试过:

  cookieManager.setAcceptCookie(true); 
      URLConnection con = u.openConnection(); 

      con.setRequestProperty("Cookie", cookieManager.getInstance().getCookie(url);); 
      con.setDoOutput(true); 
      con.connect(); 
      String addCookie = con.getHeaderField("Set-Cookie"); 
      System.out.println(con.getHeaderFields().toString()); 
      if (addCookie!=null) { 
       cookieManager.getInstance().setCookie(url, addCookie); 
      } 

但这不起作用。

+0

你是客户端还是服务器在这种情况下?如果你是客户端,你为什么使用'Set-Cookie'头文件? – 2011-06-15 08:12:41

+0

这个客户端读取它,它是由服务器发送的。 http://curl.haxx.se/rfc/cookie_spec.html – NoBugs 2011-06-15 14:25:29

+0

ohh man你救了我的命...不是答案,而是你的问题...谢谢你loooooooooooooooottttttttttttttttttttttt – iAmLearning 2014-01-10 15:41:06

回答

14

我是能够使使用伊恩·布朗的CookieManager类饼干: http://www.hccp.org/java-net-cookie-how-to.html

我把它改名为IansCookieManager,设置一个类变量_CM =新IansCookieManager,现在很简单:

  URLConnection conn = u.openConnection(); 
      _CM.setCookies(conn); 
      conn.connect(); 
      _CM.storeCookies(conn); 
      ... 
+2

这是一个很不错的基本cookie管理器。我喜欢。我也觉得奇怪的是,需要很长时间才能包含'java.net.CookieManager'类的Android工程师。无论哪种情况,我都相信这两个类(Ian和java.net都只是暂时存储这些cookies)(即它们只会在应用程序被终止之前一直保存)。所以下次用户启动应用程序时很可能需要再次登录/ etc? – 2012-08-02 19:02:05

+2

确实如此,除非您将课程序列化并保存在某个地方。此外,离开并回到应用程序不足以“退出”应用程序,因此应该保留Cookie和浏览器会话。 – NoBugs 2012-08-02 19:12:43

+0

对,用户必须在中间做一些内存密集的东西来让系统杀死应用程序进程。序列化cookie管理类是一个好主意。可能最好使用['openFileOutput()']将其写入内部存储器(http://developer.android.com/reference/android/content/Context.html#openFileOutput%28java.lang.String,%20int%29) ?现在我使用一个非常基本的方法,只保存在'SharedPreferences'中作为'String'返回给我的单个会话cookie。我想我现在会尝试使用这个可序列化的Cookie管理器。 – 2012-08-02 21:36:22