一个可以通过URLConnection读写Cookie的类

转载 2004年06月23日 15:54:00

?这个类,可以操作在java程序中打开的网站的cookie,有些时候还是十分有用的

并且通过这个类,也可以了解一下cookie的存储方式

// Changes by: Saar Machtinger, me@cawa.com
import java.net.*;
import java.io.*;
import java.util.*;

class CookiesInJava {
?static Hashtable theCookies = new Hashtable();
?/**
? * Send the Hashtable (theCookies) as cookies, and write them to
? *? the specified URLconnection
? *
? * @param?? urlConn? The connection to write the cookies to.
? * @param?? printCookies? Print or not the action taken.
? *
? * @return? The urlConn with the all the cookies in it.
?*/
?public URLConnection writeCookies
???? (URLConnection urlConn, boolean printCookies){
?? String cookieString = "";
?? Enumeration keys = theCookies.keys();
?? while (keys.hasMoreElements()) {
???? String key = (String)keys.nextElement();
???? cookieString += key + "=" + theCookies.get(key);
???? if (keys.hasMoreElements())
??????? cookieString += "; ";
???? }
?? urlConn.setRequestProperty("Cookie", cookieString);
?? if (printCookies)
????? System.out.println("Wrote cookies:/n?? " + cookieString);
?? return urlConn;
?? }

?/**
? * Read cookies from a specified URLConnection, and insert them
? *?? to the Hashtable
? *? The hashtable represents the Cookies.
? *
? * @param?? urlConn? the connection to read from
? * @param?? printCookies? Print the cookies or not, for debugging
? * @param?? reset? Clean the Hashtable or not
?*/
?public void readCookies(URLConnection urlConn, boolean printCookies,
???????????????????? boolean reset){
?? if (reset)
????? theCookies.clear();
?? int i=1;
?? String hdrKey;
?? String hdrString;
?? String aCookie;
?? while ((hdrKey = urlConn.getHeaderFieldKey(i)) != null) {
???? if (hdrKey.equals("Set-Cookie")) {
??????? hdrString = urlConn.getHeaderField(i);
??????? StringTokenizer st = new StringTokenizer(hdrString,",");
??????? while (st.hasMoreTokens()) {
????????? String s = st.nextToken();
????????? aCookie = s.substring(0, s.indexOf(";"));
????????? // aCookie = hdrString.substring(0, s.indexOf(";"));
????????? int j = aCookie.indexOf("=");
????????? if (j != -1) {
???????????? if (!theCookies.containsKey(aCookie.substring(0, j))){
?????????????? // if the Cookie do not already exist then when keep it,
?????????????? // you may want to add some logic to update the stored Cookie instead.
?????????????? // thanks to rwhelan
?????????????? theCookies.put(aCookie.substring(0, j),aCookie.substring(j + 1));
?????????????? if (printCookies){
????????????????? System.out.println("Reading Key: " + aCookie.substring(0, j));
????????????????? System.out.println("??????? Val: " + aCookie.substring(j + 1));
????????????????? }
?????????????? }
???????????? }
????????? }
????? }
????? i++;
???? }
? }

?/**
? * Display all the cookies currently in the HashTable
? *
?*/
?public void viewAllCookies() {
?? System.out.println("All Cookies are:");
?? Enumeration keys = theCookies.keys();
?? String key;
?? while (keys.hasMoreElements()){
???? key = (String)keys.nextElement();
???? System.out.println("?? " + key + "=" +
???? theCookies.get(key));
???? }
?? }

?/**
? * Display the current cookies in the URLConnection,
? *??? searching for the: "Cookie" header
? *
? * This is Valid only after a writeCookies operation.
? *
? * @param?? urlConn? The URL to print the associates cookies in.
?*/
?public void viewURLCookies(URLConnection urlConn) {
?? System.out.print("Cookies in this URLConnection are:/n?? ");
?? System.out.println(urlConn.getRequestProperty("Cookie"));
?? }

?/**
? * Add a specific cookie, by hand, to the HastTable of the Cookies
? *
? * @param?? _key? The Key/Name of the Cookie
? * @param?? _val? The Calue of the Cookie
? * @param?? printCookies? Print or not the result
?*/
?public void addCookie(String _key, String _val, boolean printCookies){
?? if (!theCookies.containsKey(_key)){
????? theCookies.put(_key,_val);
????? if (printCookies){
???????? System.out.println("Adding Cookie: ");
???????? System.out.println("?? " + _key + " = " + _val);
???????? }
????? }
?? }
}

HttpURLConnection使用cookie

利用HttpURLConnection进行网络请求,需要使用cookie,走了一些弯路,现在的方案是使用cookiemanager。 参考: android 给url添加cookie HttpURL...
  • jiansheliuxing
  • jiansheliuxing
  • 2014年12月25日 17:01
  • 4544

HttpURLConnection模拟登录后添加cookie读取网页

[html] view plaincopy package fileTest;    import java.io.*;  import java.net.HttpURLConnecti...
  • fengyee_zju
  • fengyee_zju
  • 2013年12月29日 21:08
  • 14070

HttpURLConnection 用法

HttpURLConnection最近在写android blog的客户端,由于需要与网页交互,所以用到了这个类,整理一下。创建方式:据我所知有两种 1.HttpURLConnection conn...
  • bell10027
  • bell10027
  • 2015年12月18日 14:42
  • 961

几个实用的例子——Cookie读写详解

Cookie简介 Cookie的引文原意是“点心”,它是在客户端访问Web服务器时,服务器在鹅湖段硬盘上存放的信息,好像是服务器发送给客户的“点心”。服务器可以根据Cookie来跟踪客户状态,这对于...
  • Goskalrie
  • Goskalrie
  • 2016年04月20日 17:50
  • 6917

Java网络连接-URLConnection类的使用

URLConnection 类是一个抽象类,代表应用程序和URL之间的通信连接,此类的实例可用于读取和写入此URL引用的资源。URLConnection 允许使用GET,POST或者其他HTTP方法请...
  • im_xiao
  • im_xiao
  • 2016年04月11日 20:26
  • 1625

1、URL和URLConnection类的使用

URL的使用 URLConnection的使用URL的使用URL obj = new URL("https://www.baidu.com/"); System.out.println(obj.get...
  • qq_34023608
  • qq_34023608
  • 2016年10月10日 15:03
  • 277

HttpURLConnection与 CookieManager 实现Post提交请求和Cookie管理

下面是我的疑问,为什么直接注入cookie 不可以?
  • heyu158
  • heyu158
  • 2014年04月10日 11:51
  • 47130

Cookie的获取、设置、删除及无法获取Cookie的原因

//设置cookie function utils_setCookie(cname, cvalue, exdays) { var d = new Date(); d.setTime(d.getTi...
  • KingJin_CSDN_
  • KingJin_CSDN_
  • 2017年04月10日 15:10
  • 3105

URLConnection类,HttpURLConnection类的使用和总结

1.URLConnection类1.1 URLConnection类概述抽象类 URLConnection 是所有类的超类,它代表应用程序和 URL 之间的通信链接。此类的实例可用于读取和写入此 UR...
  • laiyaxing
  • laiyaxing
  • 2016年06月04日 19:29
  • 2035

使用字节流对象读写文件

package stream.demo; import java.io.FileInputStream; import java.io.FileOutputStream; import java...
  • fandoudou123
  • fandoudou123
  • 2015年09月17日 19:26
  • 836
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个可以通过URLConnection读写Cookie的类
举报原因:
原因补充:

(最多只允许输入30个字)