2009-09-21 14 views
8

クッキーが必要なウェブページをリクエストしようとしています。私は、HttpURLConnectionのを使用していますが、応答は常に私は、要求が、そのような照会サーバが、私はクッキーがオンになっていると考えていることを行うことができますどのようにJava URLConnectionでクッキーを無効にしました

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

を言って戻ってきます。私のコードは、このようなものになります。

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(); 
} 

答えて

10

あなたはそれがクッキーを処理するためのシステムのCookieHandlerを追加する必要があります。 Java 6の前には、JREにCookieHandler実装はありません。独自に記述する必要があります。 Java 6を使用している場合は、これを行うことができます。

CookieHandler.setDefault(new CookieManager()); 

URLConnectionのCookie処理は実際には弱いです。それはほとんど動作しません。すべてのCookieルールを正しく処理するわけではありません。認証のような機密性の高いCookieを扱う場合は、Apache HttpClientを使用する必要があります。

+0

今私はhttpプロキシ認証を行う方法を理解する必要があります。私はURLConnectionで作業していましたが、今ここでそれを理解する必要があります。 tsok、Googleはprolly私のために何かを見つけるだろう;)ありがとう! – dharga

1
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", "..."); 
-4

ログイン後に大量のデータを削り取ろうとしている場合、WebHarvest(http://web-harvest.sourceforge.net/)のようなスクリプト化されたWebスクレイパーでは、自分のプロジェクトで大きな成功を収めた方が良いかもしれません。

2

私はサーバーがクライアントがクッキーをサポートしていないという最初の要求を判断できないと思います。したがって、おそらくサーバーからリダイレクトが送信されます。

uc.setInstanceFollowRedirects(false); 

次に、応答からクッキーを取得し、次のリクエストで(必要に応じて)使用することができます。

関連する問題