簡體   English   中英

使用Java URLConnection關閉Cookie

[英]Cookies turned off with Java URLConnection

我正在嘗試向需要cookie的網頁發出請求。 我正在使用HTTPUrlConnection,但響應總是回來說

<div class="body"><p>Your browser's cookie functionality is turned off. Please turn it on.

我如何發出請求,以便查詢的服務器認為我已打開cookie。 我的代碼就是這樣的。

private String readPage(String page) throws MalformedURLException {
    try {
        URL url = new URL(page);
        HttpURLConnection uc = (HttpURLConnection) url.openConnection();
        uc.connect();

        InputStream in = uc.getInputStream();
        int v;
        while( (v = in.read()) != -1){
            sb.append((char)v);
        }
        in.close();
        uc.disconnect();
    } catch (IOException e){
        e.printStackTrace();
    }
    return sb.toString();
}

您需要向系統添加CookieHandler才能處理cookie。 在Java 6之前,JRE中沒有CookieHandler實現,您必須自己編寫。 如果您使用的是Java 6,則可以執行此操作,

  CookieHandler.setDefault(new CookieManager());

URLConnection的cookie處理非常弱。 它幾乎沒有用。 它無法正確處理所有cookie規則。 如果您正在處理敏感cookie(如身份驗證),則應使用Apache HttpClient。

我認為服務器無法在第一次請求時確定客戶端不支持cookie。 所以,可能服務器發送重定向。 嘗試禁用重定向:

uc.setInstanceFollowRedirects(false);

然后,您將能夠從響應中獲取cookie並在下一個請求中使用它們(如果需要)。

uc.getHeaderFields()
// get cookie (set-cookie) here

URLConnection conn = url.openConnection();
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.0; pl; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2");
conn.addRequestProperty("Referer", "http://xxxx");
conn.addRequestProperty("Cookie", "...");

如果您在登錄后嘗試抓取大量數據,您甚至可以使用像WebHarvest( http://web-harvest.sourceforge.net/ )這樣的腳本網絡刮刀更好地使用它來取得巨大成功在我自己的一些項目中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM