package com.main;import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;public class Test { public static void main(String[] args) {
try {
URL url=new URL("http://www.taobao.com");
HttpURLConnection huc = (HttpURLConnection) url.openConnection();
huc.connect();
InputStream is = huc.getInputStream();
// 取得sessionID.
String cookieVal = huc.getHeaderField("Set-Cookie");
String sessionId="";
if (cookieVal != null) {
sessionId = cookieVal.substring(0, cookieVal.indexOf(";"));
}

System.out.println(sessionId); } catch (Exception e) {
e.printStackTrace();
}
}
}

解决方案 »

  1.   

    if (cookieVal != null) { 
    sessionId = cookieVal.substring(0, cookieVal.indexOf(";")); 
    } 看看这句执行了没 打印测试下
    没执行的话就是没有取到cookieVal   cookieVal =null
      

  2.   

    我看过的,没有执行,问题是怎么样才能让他不是null呢
      

  3.   

    String cookieVal = huc.getHeaderField("Set-Cookie"); 
    执行后cookieVal为空,问题就是这里
    可能是URL url=new URL("http://www.taobao.com"); 难道是请求的地址返回不了cookie?
      

  4.   

    huc.getHeaderField("Set-Cookie");  看看这个方法用法就知道了
      

  5.   

    cookie 不止一个,
    所以你应该循环判断才行
      

  6.   

    //import java.io.InputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;public class Test { public static void main(String[] args) {
    try {
    URL url = new URL("http://www.taobao.com");
    HttpURLConnection huc = (HttpURLConnection)url.openConnection();
    huc.connect();
    //InputStream is = huc.getInputStream();
    //取得sessionID
    String cookieVal = huc.getHeaderField("Set-Cookie");
    String sessionId = "";
    if (cookieVal != null) {
    sessionId = cookieVal.substring(0, cookieVal.indexOf(";"));
    }
    System.out.println(sessionId);
    ////////////////////////////////////////////////////////////////////////////
    Map<String, List<String>> map = huc.getHeaderFields();
    Set<String> keys = map.keySet();
    for (String key : keys) {
    System.out.println(key);
    List<String> values = map.get(key);
    for (String value : values) {
    System.out.println("\t" + value);
    }
    }
    ////////////////////////////////////////////////////////////////////////////
    } catch (Exception e) {
    e.printStackTrace();
    }
    }}
      

  7.   

    输出:null
    HTTP/1.1 200 OK
    Content-Language
    cn
    Date
    Mon, 29 Sep 2008 03:58:04 GMT
    Vary
    Accept-Encoding
    Transfer-Encoding
    chunked
    Expires
    Mon, 29 Sep 2008 04:58:04 GMT
    Keep-Alive
    timeout=15, max=60
    Connection
    Keep-Alive
    Content-Type
    text/html; charset=GB2312
    Server
    Apache
    Cache-Control
    max-age=3600
    没有 Set-Cookie 响应头。
      

  8.   


    我自己研究了下,有requestHeader和responseHeader之分
    我用监控软件监控了下(Request-Line)这是请求,有cookie:
    GET / HTTP/1.1
    Accept:*/*
    Accept-Language:en,zh-cn;q=0.5
    Accept-Encoding:gzip, deflate
    User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; MAXTHON 2.0)
    Host:www.baidu.com
    Connection:Keep-Alive
    Cookie:BAIDUID=1DDAA25773ADF9582C8A3545B6BAC8DC:FG=1; BDSTAT=b9b227957c2770a776c6a7efce1b9d16fdfaaf51f5deb48f8c5494eef11f465d; BD_UTK_DVT=1; BDSP=1c720bb01a4c510f047071d36059252dd42a2834349b033b5bb5c9ea15ce36d3d539b6003af33a87e950352ac65c10385343fbf2b2119313b07eca8065380cd7912397dda144ad345982b2b7d0a20cf431adcbef76094b36acaf2edda3cc7cd98f10e44e(Status-Line)这是response,一般不会有cookie:
    HTTP/1.1 200 OK
    Date:Mon, 29 Sep 2008 04:56:26 GMT
    Server:BWS/1.0
    Content-Length:1714
    Content-Type:text/html
    Cache-Control:private
    Expires:Mon, 29 Sep 2008 04:56:26 GMT
    Content-Encoding:gzip
    因为上面的代码只是看了response的header,所以为空,但是如何去获取request的header呢?
    我虽然用了下面的代码,但是还是打印不出信息来.
    package com.main;import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;public class Test { public static void main(String[] args) {
    try {
    URL url = new URL("http://www.google.com");
    HttpURLConnection huc = (HttpURLConnection) url.openConnection();

    // //////////////////////////////////////////////////////////////////////////
    Map<String, List<String>> map = huc.getRequestProperties();
    Set<String> keys = map.keySet();
    for (String key : keys) {
    System.out.println(key);
    List<String> values = map.get(key);
    for (String value : values) {
    System.out.println("\t" + value);
    }
    }
    // //////////////////////////////////////////////////////////////////////////
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }
      

  9.   

    huc.getHeaderField("Set-Cookie");  
      

  10.   

    楼主用 HttpClient 吧,下载地址:http://hc.apache.org/downloads.cgi
      

  11.   

    行,能不能给段代码,我下好HttpClient就可以直接用了
      

  12.   

    给你一段登录和讯博客的:import java.io.IOException;
    import org.apache.commons.httpclient.Cookie;
    import org.apache.commons.httpclient.HttpClient;
    import org.apache.commons.httpclient.HttpException;
    import org.apache.commons.httpclient.HttpStatus;
    import org.apache.commons.httpclient.cookie.CookiePolicy;
    import org.apache.commons.httpclient.methods.GetMethod;
    import org.apache.commons.httpclient.methods.PostMethod;
    import org.apache.commons.httpclient.params.HttpClientParams;
    public class Main { public static final String USER_AGENT = "Mozilla/5.0 (Windows; U; Windows NT 6.0; zh-CN; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1"; public static void main(String[] args) {
    String username = "YourUsername";
    String password = "YourPassword";
    try {
    HttpClient hc = new HttpClient();
    hc.getParams().setParameter(HttpClientParams.USER_AGENT, USER_AGENT);
    hc.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
    ////////////////////////////////////////////////////////////////////////////
    GetMethod hm1 = new GetMethod("http://reg.hexun.com/login.aspx");
    hc.executeMethod(hm1);
    hm1.releaseConnection();
    if (hm1.getStatusCode() != HttpStatus.SC_OK) return;
    ////////////////////////////////////////////////////////////////////////////
    PostMethod hm2 = new PostMethod("http://reg.hexun.com/login.aspx");
    hm2.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    hm2.addParameter("TextBoxUserName", username);
    hm2.addParameter("TextBoxPassword", password);
    hm2.addParameter("TextGpic", "");
    hm2.addParameter("hiddenReferrer", "http://blog.hexun.com/");
    hm2.addParameter("gourl", "");
    hm2.addParameter("LoginStateName", "1");
    hm2.addParameter("submitsign", "1");
    hm2.addParameter("x", "32");
    hm2.addParameter("y", "9");
    hc.executeMethod(hm2);
    hm2.releaseConnection();
    if (hm2.getStatusCode() != HttpStatus.SC_MOVED_TEMPORARILY) return;
    ////////////////////////////////////////////////////////////////////////////
    String rdurl = hm2.getResponseHeader("Location").getValue();
    StringBuilder sb = new StringBuilder();
    String tck = null;
    Cookie[] cks = hc.getState().getCookies();
    for (Cookie ck : cks) {
    if ("ASP.NET_SessionId".equalsIgnoreCase(ck.getName())) continue;
    if ("hxck_sq_common".equalsIgnoreCase(ck.getName())) tck = ck.getValue();
    if (sb.length() > 0) sb.append("; ");
    sb.append(ck.getName());
    sb.append("=");
    sb.append(ck.getValue());
    }
    hc.getState().clearCookies();
    ////////////////////////////////////////////////////////////////////////////
    GetMethod hm3 = new GetMethod(rdurl);
    hm3.setFollowRedirects(false);
    hm3.addRequestHeader("Referer", "http://reg.hexun.com/login.aspx");
    hm3.addRequestHeader("Cookie", sb.toString());
    hc.executeMethod(hm3);
    hm3.releaseConnection();
    if (hm3.getStatusCode() != HttpStatus.SC_MOVED_PERMANENTLY) return;
    ////////////////////////////////////////////////////////////////////////////
    rdurl = hm3.getResponseHeader("Location").getValue();
    sb.setLength(0);
    cks = hc.getState().getCookies();
    for (Cookie ck : cks) {
    if ("ASP.NET_SessionId".equalsIgnoreCase(ck.getName())) continue;
    if (sb.length() > 0) sb.append("; ");
    sb.append(ck.getName());
    sb.append("=");
    sb.append(ck.getValue());
    }
    if (sb.length() > 0) sb.append("; ");
    sb.append("; hxck_sq_common=");
    sb.append(tck);
    hc.getState().clearCookies();
    ////////////////////////////////////////////////////////////////////////////
    GetMethod hm4 = new GetMethod(rdurl);
    hm4.setFollowRedirects(false);
    hm4.addRequestHeader("Referer", "http://reg.hexun.com/login.aspx");
    hm4.addRequestHeader("Cookie", sb.toString());
    hc.executeMethod(hm4);
    System.out.println(hm4.getResponseBodyAsString());
    hm4.releaseConnection();
    } catch (HttpException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }}
      

  13.   


    我看来了,是通过四次执行method来执行一个登录操作,但我对这四次具体做了些什么不是很了解能够给我解释一下呢还有,我听说现在httpclient被合并到httpcomponents里了,而且httpclient部分做了很大改动,不知道你用的是以前的版本还是现在的新版本?
      

  14.   

    其实我要做的事情很简单,模拟浏览器做登录操作和进一步的操作:大家都知道一个会话(session)期间包含了n个请求和回复(request 和 response)为了识别每次请求是否来自同一个用户,采用了cookie技术,禁用cookie的时候采用url重写技术,这里,暂不考虑url重写技术现在来谈谈cookie,我现在的认识是(可能是错误的,希望指正):
    当你第一次访问某网站主页的时候(比如http://www.baidu.com),这个时候就会在cookie中有一个特殊的值是用来指示是否
    是同一个用户的,然后整个session期间就一直沿用这个特殊值.从Enter Url到此刻为止,就产生了这么一个特殊值sessionId(题外话,过去
    的我一直以为,只有登录了网站,输入用户名密码之后才会有这个特殊值).我现在需要在登录网站(登录网站为第一步操作)之后,做第二步的操作,也就是说,第二步的操作需要至少三个值:
    1.用户名
    2.密码
    3.特殊值sessionId(万事具备,只欠id)我现在就是不知道如何去获取这个id但我现在知道,当我去访问百度主页http://www.baidu.com的时候,他就会给我一个sessionId
    我可以知道某时某刻我访问百度主页的时候的sessionId,可是这是用别人的软件获取的,无法在我自己的java程序里获取.也许是我一开始没讲清楚,但这个才是我的问题所在.