Java で、サイトにアクセスして HTML を取得する方法

Perl だとほんの数行で書けてしまうことが Java だと結構かかる (C だともっとかかる)。以下は STR_URL で指定した URL の内容 (HTML) を取ってきてコンソールに表示する例。何をしているかはコメントをご覧ください。
import java.net.URL;
import java.net.HttpURLConnection;
import java.io.InputStreamReader;
import java.io.BufferedReader;

...

// アクセスする URL を文字列に設定する。
String STR_URL = "https://perltips.twinkle.cc/";

// URLを作成する。
URL url = new java.net.URL(STR_URL);

// 接続を取得する (接続は new して作るのではなく、openConnection メソッドで取得する)。
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET"); // ←ここは任意。なくても良い

// リーダーを読んでHTTPレスポンスを取得する。
// ただし,リクエストした先のURLが画像などの場合は、InputStreamでバイト列として扱う。
// 文字エンコーディングは「JISAutoDetect」で自動検出させる。
InputStreamReader isr = new java.io.InputStreamReader(conn.getInputStream(), "JISAutoDetect");
BufferedReader br = new java.io.BufferedReader(isr);

// 受信したストリームを表示
String line = null;
while (null != (line = br.readLine())) {
    System.out.println(line);
}

// ストリームならびに接続をクローズ
br.close();
conn.disconnect();

...
Perl だとほんの数行で書けてしまうことが Java だと結構かかる (C だともっとかかる)。以下は STR_URL で指定した URL の内容 (HTML) を取ってきてコンソールに表示する例。何をしているかはコメントをご覧ください。
import java.net.URL;
import java.net.HttpURLConnection;
import java.io.InputStreamReader;
import java.io.BufferedReader;

...

// アクセスする URL を文字列に設定する。
String STR_URL = "https://perltips.twinkle.cc/";

// URLを作成する。
URL url = new java.net.URL(STR_URL);

// 接続を取得する (接続は new して作るのではなく、openConnection メソッドで取得する)。
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET"); // ←ここは任意。なくても良い

// リーダーを読んでHTTPレスポンスを取得する。
// ただし,リクエストした先のURLが画像などの場合は、InputStreamでバイト列として扱う。
// 文字エンコーディングは「JISAutoDetect」で自動検出させる。
InputStreamReader isr = new java.io.InputStreamReader(conn.getInputStream(), "JISAutoDetect");
BufferedReader br = new java.io.BufferedReader(isr);

// 受信したストリームを表示
String line = null;
while (null != (line = br.readLine())) {
    System.out.println(line);
}

// ストリームならびに接続をクローズ
br.close();
conn.disconnect();

...
Posted on 2005-12-20 by yas |

PHP で、サイトにアクセスして HTML を取得する方法

PHP の場合は、fopen 関数の引数に URL を指定すればその URL にある HTML をオープンすることができる。後は while でファイルポインタの最後 (EOF: End of File) まで読み出してあげればよい。
<?php

// アクセスする URL を指定
$URL = 'https://perltips.twinkle.cc/';

// URL をオープン
$fp = fopen($URL, 'r');

// HTML を読み出す
while (! feof($fp)) {

    print
fread($fp, 1024) or die("READ");
}

// HTML のクローズ
fclose($fp) or die("CLOSE"); 

?>
PHP の場合は、fopen 関数の引数に URL を指定すればその URL にある HTML をオープンすることができる。後は while でファイルポインタの最後 (EOF: End of File) まで読み出してあげればよい。
<?php

// アクセスする URL を指定
$URL = 'https://perltips.twinkle.cc/';

// URL をオープン
$fp = fopen($URL, 'r');

// HTML を読み出す
while (! feof($fp)) {

    print
fread($fp, 1024) or die("READ");
}

// HTML のクローズ
fclose($fp) or die("CLOSE"); 

?>
Posted on 2005-12-17 by yas |

Perl で、サイトにアクセスして HTML を取得する方法

LWP (libwww-perl という形で配布されている) を使う。LWP::Agent モジュールは、ウェブクライアント、ウェブオートメーション (ソフトウェアやプログラムが自動的にサイトにアクセスして情報を取ってくること) といったものの基本である。もうはるか彼方、何年も前からある技術なのに基本は変わっていないのがポイント。以下のスクリプトは、$URL で指定されているサイトにアクセスして、成功すればその HTML のコードをコンソールに表示、失敗したときはエラーコードを出力する例。CGI として機能させたときは、ブラウザには HTML コードでなく $URL でアクセスしたページを表示する。つまりプロキシとして動作するということ。 シンプルなバージョン
#!/usr/bin/perl

use LWP::UserAgent;
use HTTP::Request;
use HTTP::Response;

our $URL = 'https://perltips.twinkle.cc/'; # アクセスする URL

my $proxy = new LWP::UserAgent;

my $req = HTTP::Request->new('GET' => $URL); # HTTP リクエストを作成
my $res = $proxy->request($req); # $res に HTTP レスポンスが返ってくる

print $res->content; # HTML を表示

1;
ちょっと長いバージョン
#!/usr/bin/perl

use LWP::UserAgent;
use HTTP::Request;
use HTTP::Response;

our $URL = 'https://perltips.twinkle.cc/'; # アクセスする URL

my $proxy = new LWP::UserAgent;
$proxy->agent('your own created browser name here'); # 任意
$proxy->timeout(60); # 任意

my $req = HTTP::Request->new('GET' => $URL);
my $res = $proxy->request($req);
my $content = $res->content;

print "Content-Type: text/html\n\n"; # HTML ヘッダ (CGI として動作できる)
if($res->is_success) {
    print $content;
} else {
    print 'HTTP エラーコード: ' . $res->code;
}

1;
LWP (libwww-perl という形で配布されている) を使う。LWP::Agent モジュールは、ウェブクライアント、ウェブオートメーション (ソフトウェアやプログラムが自動的にサイトにアクセスして情報を取ってくること) といったものの基本である。もうはるか彼方、何年も前からある技術なのに基本は変わっていないのがポイント。以下のスクリプトは、$URL で指定されているサイトにアクセスして、成功すればその HTML のコードをコンソールに表示、失敗したときはエラーコードを出力する例。CGI として機能させたときは、ブラウザには HTML コードでなく $URL でアクセスしたページを表示する。つまりプロキシとして動作するということ。 シンプルなバージョン
#!/usr/bin/perl

use LWP::UserAgent;
use HTTP::Request;
use HTTP::Response;

our $URL = 'https://perltips.twinkle.cc/'; # アクセスする URL

my $proxy = new LWP::UserAgent;

my $req = HTTP::Request->new('GET' => $URL); # HTTP リクエストを作成
my $res = $proxy->request($req); # $res に HTTP レスポンスが返ってくる

print $res->content; # HTML を表示

1;
ちょっと長いバージョン
#!/usr/bin/perl

use LWP::UserAgent;
use HTTP::Request;
use HTTP::Response;

our $URL = 'https://perltips.twinkle.cc/'; # アクセスする URL

my $proxy = new LWP::UserAgent;
$proxy->agent('your own created browser name here'); # 任意
$proxy->timeout(60); # 任意

my $req = HTTP::Request->new('GET' => $URL);
my $res = $proxy->request($req);
my $content = $res->content;

print "Content-Type: text/html\n\n"; # HTML ヘッダ (CGI として動作できる)
if($res->is_success) {
    print $content;
} else {
    print 'HTTP エラーコード: ' . $res->code;
}

1;

Perl で、Shift JIS でスクリプトを保存するには?

Perl でケータイ向けのサイトを書いているとき、シフトJIS でスクリプトを保存しないければならない場合がある (文字列テーブルなど)。このとき、
Unrecognized character \x81 at ./your.cgi line XX.
といったエラーに悩まされているなら、
my $group = 'グル&amp;#x30fc;プ';
などのように、「―」を「ー」で表すようにするとよい (Mac の場合は、「ー」が「―」になるようで、この現象が起こる)。または、文字化けする文字の後ろに「\」を付ける。 以下は、Shift JIS で文字化けする文字の一覧。文字化けを起こしやすいよく使う文字は強調しておいた。 文字 - Shift-JIS - Unicode での記述方法
  81 5C   ―
  83 5C   ソ
Ы  84 5C   Ы
Ⅸ  87 5C   Ⅸ
噂  89 5C   噂
浬  8A 5C   浬
欺  8B 5C   欺
圭  8C 5C   圭
  8D 5C   構
蚕  8E 5C   蚕
  8F 5C   十
  90 5C   申
曾  91 5C   曾
箪  92 5C   箪
  93 5C   貼
  94 5C   能
  95 5C   表
暴  96 5C   暴
  97 5C   予
禄  98 5C   禄
兔  99 5C   兔
喀  9A 5C   喀
媾  9B 5C   媾
彌  9C 5C   彌
拿  9D 5C   拿
杤  9E 5C   杤
歃  9F 5C   歃
濬  E0 5C   濬
畚  E1 5C   畚
秉  E2 5C   秉
綵  E3 5C   綵
臀  E4 5C   臀
藹  E5 5C   藹
觸  E6 5C   觸
軆  E7 5C   軆
鐔  E8 5C   鐔
饅  E9 5C   饅
鷭  EA 5C   鷭
偆  ED 5C   偆
砡  EE 5C   砡
Perl でケータイ向けのサイトを書いているとき、シフトJIS でスクリプトを保存しないければならない場合がある (文字列テーブルなど)。このとき、
Unrecognized character \x81 at ./your.cgi line XX.
といったエラーに悩まされているなら、
my $group = 'グル&amp;#x30fc;プ';
などのように、「―」を「ー」で表すようにするとよい (Mac の場合は、「ー」が「―」になるようで、この現象が起こる)。または、文字化けする文字の後ろに「\」を付ける。 以下は、Shift JIS で文字化けする文字の一覧。文字化けを起こしやすいよく使う文字は強調しておいた。 文字 - Shift-JIS - Unicode での記述方法
  81 5C   ―
  83 5C   ソ
Ы  84 5C   Ы
Ⅸ  87 5C   Ⅸ
噂  89 5C   噂
浬  8A 5C   浬
欺  8B 5C   欺
圭  8C 5C   圭
  8D 5C   構
蚕  8E 5C   蚕
  8F 5C   十
  90 5C   申
曾  91 5C   曾
箪  92 5C   箪
  93 5C   貼
  94 5C   能
  95 5C   表
暴  96 5C   暴
  97 5C   予
禄  98 5C   禄
兔  99 5C   兔
喀  9A 5C   喀
媾  9B 5C   媾
彌  9C 5C   彌
拿  9D 5C   拿
杤  9E 5C   杤
歃  9F 5C   歃
濬  E0 5C   濬
畚  E1 5C   畚
秉  E2 5C   秉
綵  E3 5C   綵
臀  E4 5C   臀
藹  E5 5C   藹
觸  E6 5C   觸
軆  E7 5C   軆
鐔  E8 5C   鐔
饅  E9 5C   饅
鷭  EA 5C   鷭
偆  ED 5C   偆
砡  EE 5C   砡