亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

不同工具(jsoup、httpclient)獲取多個同路徑

系統(tǒng) 2329 0

這兩天在iteye的問答中有一個【 java中使用jsoup獲取cookies 】問題, 地址: http://www.iteye.com/problems/87415

?

不知大家遇到類似的問題嗎,希望一起探討。


1、首先第一次訪問http://www.17sct.com/city.php?ename=CHANGZHOU,我們可以看到如下請求:


不同工具(jsoup、httpclient)獲取多個同路徑下同名Cookie的問題

我們看到 設(shè)置了兩個 99a0_city cookie, 值分別為1 和 269;如chrome、firefox、ie8將選擇最后一個作為cookie值。

?

好像沒什么問題,接下來繼續(xù)看兩個工具:

1、jsoup

?

            Connection conn = Jsoup.connect("http://www.17sct.com/city.php?name=CHANGZHOU");
    	conn.method(Method.GET);
    	conn.followRedirects(false);
    	Response response = conn.execute();
    	System.out.println(response.cookies());
    	//{referer=deleted, 99a0_city=1, PHPSESSID=b5rjkoq2s2qmukjf9n2ffvjvn5}
    	//立即過期的也顯示出了,即從服務(wù)器傳過來的都顯示
  

?

? 99a0_city竟然為1,即選擇了第一個作為cookie的值。

?

查看并修改org.jsoup.helper.HttpConnection中獲取cookie的代碼:

?

                // headers into map
            Map<String, List<String>> resHeaders = conn.getHeaderFields();
            
            for (Map.Entry<String, List<String>> entry : resHeaders.entrySet()) {
                String name = entry.getKey();
                if (name == null)
                    continue; // http/1.1 line

                List<String> values = entry.getValue();

                if (name.equalsIgnoreCase("Set-Cookie")) {
                    for (String value : values) {
                        TokenQueue cd = new TokenQueue(value);
                        String cookieName = cd.chompTo("=").trim();
                        String cookieVal = cd.consumeTo(";").trim();
                        // ignores path, date, domain, secure et al. req'd?
                        System.out.println(cookieName+"="+cookieVal);
                        cookie(cookieName, cookieVal);
                    }
                } else { // only take the first instance of each header
                    if (!values.isEmpty())
                        header(name, values.get(0));
                }
            }
  

?

?

conn是java.net.HttpURLConnection,也就是說如果使用HttpURLConnection時 有多個同名的cookie 將獲取第一個作為cookie的值。

?

2、HttpClient,和瀏覽器行為一樣獲取最后一個Cookie:

?

        	HttpClient client = new HttpClient();
    	GetMethod get = new GetMethod("http://www.17sct.com/city.php?ename=CHANGZHOU");
    	get.setFollowRedirects(false);
    	client.executeMethod(get);
    	System.out.println(Arrays.toString(client.getState().getCookies()));
    	//[PHPSESSID=cn74fv516879pv26h5lbaf9gd0, 99a0_city=269]
    	//立即過期的不顯示出來
  
?

?

?

因此總結(jié):

1、使用java.net.HttpURLConnection的工具/框架, 如果多個同路徑下同名的cookie將獲取第一個

2、使用apache?HttpClient, 和瀏覽器行為一樣獲取最后一個。

?

?

因此,當(dāng)我們在使用cookie時,盡量保證服務(wù)器設(shè)置一個cookie。

?

?

還要注意:

?

1、使用java.net.HttpURLConnection的工具/框架, 可能獲取到過期的cookie,如之前的referer[過期時間是2011年,即立即過期];

2、使用apache?HttpClient, 不會獲取到過期的cookie。

?

不知大家遇到類似的問題嗎,希望一起探討。

不同工具(jsoup、httpclient)獲取多個同路徑下同名Cookie的問題


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲青色在线 | 国产首页精品 | 成人午夜亚洲影视在线观看 | 国产亚洲午夜精品a一区二区 | 精品一久久香蕉国产线看播放 | 337p日本欧洲亚洲大胆艺术 | 国产xx肥老妇视频奂费 | 精品国产亚一区二区三区 | 四虎国产精品永久在线 | 国产精品久久久精品视频 | 欧美精品一区二区三区观 | 久久精品视频免费观看 | 亚洲一区二区三区高清视频 | 99精品视频在线观看 | 日韩视频 中文字幕 | 高清在线亚洲精品国产二区 | 四虎永久在线观看免费网站网址 | 韩国精品videosex性韩国 | 国产香蕉在线视频 | 欧美色视频超清在线观看 | www干| 久久久久国产成人精品 | 中文字幕亚洲综合精品一区 | 91精东果冻蜜桃星空麻豆 | 寡妇一级a毛片免费播放 | 午夜时刻免费实验区观看 | 久久免费精品 | 四虎久久精品国产 | 国内福利视频 | 免费爱爱 | 久久精品天堂 | 国产一区二区日韩欧美在线 | 久久久久久亚洲精品中文字幕 | 久久人人精品 | 亚洲欧美日韩一区二区在线观看 | 欧美国产成人精品一区二区三区 | 日韩精品一区二区三区免费观看 | 中文字幕在线亚洲 | 麻豆国产在线不卡一区二区 | 99热久久精品首页 | 国产91小视频 |