Java で、cookie を処理する方法

ずばり、J2SE のドキュメントのページ「cookie サポート」が詳しい。以下のコードを参照のこと。
String protocol = "http";
String hostname = "yourdomain.com";
int port = 80;
String file = "/";

try {

    URL url = new URL(protocol, hostname, port, file);

    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setDoInput(true);    // Input OK
    conn.setDoOutput(true);   // Output OK
    conn.setUseCaches(false); // Cache NG
    conn.setRequestProperty("Content-type",
            "application/x-www-form-urlencoded");
    conn.connect();           // Connect

    boolean isRedirect = HttpURLConnection.getFollowRedirects();

    String cookieValue = null;
    try {
        Map<String, List<String>> headers = conn.getHeaderFields();
        List<String> values = headers.get("Set-Cookie");
        for (Iterator<String> iter = values.iterator(); iter.hasNext();) {
            String v = iter.next();
            if (cookieValue == null)
                cookieValue = v;
            else
                cookieValue = cookieValue + ";" + v;
        }
    } catch (Exception e) {
    }
    System.out.println(this.getClass().getName()
            + ": cookieValue: " + cookieValue);

   conn.close();

} catch (Exception e) {
    e.printStackTrace();
    return false;
}
ずばり、J2SE のドキュメントのページ「cookie サポート」が詳しい。以下のコードを参照のこと。
String protocol = "http";
String hostname = "yourdomain.com";
int port = 80;
String file = "/";

try {

    URL url = new URL(protocol, hostname, port, file);

    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setDoInput(true);    // Input OK
    conn.setDoOutput(true);   // Output OK
    conn.setUseCaches(false); // Cache NG
    conn.setRequestProperty("Content-type",
            "application/x-www-form-urlencoded");
    conn.connect();           // Connect

    boolean isRedirect = HttpURLConnection.getFollowRedirects();

    String cookieValue = null;
    try {
        Map<String, List<String>> headers = conn.getHeaderFields();
        List<String> values = headers.get("Set-Cookie");
        for (Iterator<String> iter = values.iterator(); iter.hasNext();) {
            String v = iter.next();
            if (cookieValue == null)
                cookieValue = v;
            else
                cookieValue = cookieValue + ";" + v;
        }
    } catch (Exception e) {
    }
    System.out.println(this.getClass().getName()
            + ": cookieValue: " + cookieValue);

   conn.close();

} catch (Exception e) {
    e.printStackTrace();
    return false;
}
Posted on 2006-06-15 by yas |

サイトのリンク切れの検出チェックをするには?

checkbot を利用するといいだろう。 これは Perl ベースのコマンドラインツールで、実行するとリンク切れをチェックして HTML を出力する。その HTML に書き出された検出結果をブラウザから見るという使い方。 この checkbot、UTF-8 で書かれたサイトを指定してて実行すると、 Parsing of undecoded UTF-8 will give garbage when decoding entities at /usr/lib/perl5/site_perl/5.8.7/LWP/Protocol.pm line XXX, line 1. などのエラーが出るが、気にしないでよい。実行例としては、 ./checkbot --url https://perltips.twinkle.cc/ --internal-only --ignore "\.js|hatena\.ne\.jp|\.ico" ※本当は全部 1行 のような感じで、上の例だと、https://perltips.twinkle.cc/ (このサイト)を対象にして、JavaScript のリンク (.js)、hatena.ne.jp、アイコンファイル (.ico) を無視し、サイト内だけリンク切れをチェックする、という設定である。
checkbot を利用するといいだろう。 これは Perl ベースのコマンドラインツールで、実行するとリンク切れをチェックして HTML を出力する。その HTML に書き出された検出結果をブラウザから見るという使い方。 この checkbot、UTF-8 で書かれたサイトを指定してて実行すると、 Parsing of undecoded UTF-8 will give garbage when decoding entities at /usr/lib/perl5/site_perl/5.8.7/LWP/Protocol.pm line XXX, line 1. などのエラーが出るが、気にしないでよい。実行例としては、 ./checkbot --url https://perltips.twinkle.cc/ --internal-only --ignore "\.js|hatena\.ne\.jp|\.ico" ※本当は全部 1行 のような感じで、上の例だと、https://perltips.twinkle.cc/ (このサイト)を対象にして、JavaScript のリンク (.js)、hatena.ne.jp、アイコンファイル (.ico) を無視し、サイト内だけリンク切れをチェックする、という設定である。

Movable Type で、カテゴリーのディレクトリ名を指定する方法

Movable Type 日本語版は、カテゴリー名に英数字が入っていた場合はそれを利用してディレクトリ名を作成しようとするが、日本語のみのカテゴリー名を付けた場合には、Movable Type が cat72 などと勝手なディレクトリ名をつけてしまう。 カテゴリー名はそのままブログのパーマリンクの URL の一部となる。URL の一部ということは SEO の観点からいうとキーワードの一部であるため、これはできればせめてキーワードに関連した英単語などにしたい。 その方法だが、
  1. カテゴリー名をつけときに、まずは &lt;自分の指定したいディレクトリ名&gt;日本語のカテゴリー名 とする。
  2. 次に、テンプレート中の や の部分を、 <$MTCategoryLabel decode_html="1" remove_html="1"$> <$MTArchiveTitle decode_html="1" remove_html="1"$> に置き換える。
  3. 最後に再構築する。
Movable Type 日本語版は、カテゴリー名に英数字が入っていた場合はそれを利用してディレクトリ名を作成しようとするが、日本語のみのカテゴリー名を付けた場合には、Movable Type が cat72 などと勝手なディレクトリ名をつけてしまう。 カテゴリー名はそのままブログのパーマリンクの URL の一部となる。URL の一部ということは SEO の観点からいうとキーワードの一部であるため、これはできればせめてキーワードに関連した英単語などにしたい。 その方法だが、
  1. カテゴリー名をつけときに、まずは &lt;自分の指定したいディレクトリ名&gt;日本語のカテゴリー名 とする。
  2. 次に、テンプレート中の や の部分を、 <$MTCategoryLabel decode_html="1" remove_html="1"$> <$MTArchiveTitle decode_html="1" remove_html="1"$> に置き換える。
  3. 最後に再構築する。

Movable Type で、他ブログまで検索して結果を表示させない方法

Movable Type(バージョンは 3.2)は、私もなぜこんな仕様になっているのか謎なのだが、デフォルトのテンプレートについてる検索ボックスから検索して、その検索結果が表示されたページからまた検索を行うと、今度は Movable Type が管理しているすべてのブログを検索しに行ってしまう。これを防ぐにはどうしたらいいのだろうか? にその方法が紹介されていた。要は、Movable Type をインストールしたディレクトリにある、 search_templates/default.tmpl の中の ~ の部分を探して以下の青字の 1行を追加すればよい。
<form method="post" action="<$MTCGIPath$><$MTSearchScript$>">

<h3><MT_TRANS phrase="Search this site:"></h3>

<p><input type="text" size="30" name="search" value="<$MTSearchString$>" /> <input type="submit" value="<MT_TRANS phrase='Search'>" /></p>

<p><input type="checkbox" name="CaseSearch" /> <MT_TRANS phrase='Match case'> <input type="checkbox" name="RegexSearch" /> <MT_TRANS phrase='Regex search'></p>
<font color="blue"><input type="hidden" name="IncludeBlogs" value="<$MTBlogID$>" /></font>

</form>
Movable Type(バージョンは 3.2)は、私もなぜこんな仕様になっているのか謎なのだが、デフォルトのテンプレートについてる検索ボックスから検索して、その検索結果が表示されたページからまた検索を行うと、今度は Movable Type が管理しているすべてのブログを検索しに行ってしまう。これを防ぐにはどうしたらいいのだろうか? にその方法が紹介されていた。要は、Movable Type をインストールしたディレクトリにある、 search_templates/default.tmpl の中の ~ の部分を探して以下の青字の 1行を追加すればよい。
<form method="post" action="<$MTCGIPath$><$MTSearchScript$>">

<h3><MT_TRANS phrase="Search this site:"></h3>

<p><input type="text" size="30" name="search" value="<$MTSearchString$>" /> <input type="submit" value="<MT_TRANS phrase='Search'>" /></p>

<p><input type="checkbox" name="CaseSearch" /> <MT_TRANS phrase='Match case'> <input type="checkbox" name="RegexSearch" /> <MT_TRANS phrase='Regex search'></p>
<font color="blue"><input type="hidden" name="IncludeBlogs" value="<$MTBlogID$>" /></font>

</form>