|
ASH | サーバ | セキュリティ | Linux | FreeBSD | DB | Web | CGI | Perl | Java | XML | プログラム | ネットワーク | 標準 | Tips集
Javaネットワークプログラミング(Socket,URLConnection) JavaでSOCKETやURLConnectionを使った簡単なプログラムを参考に、Javaのネットワークプログラミングについて解説します。
Javaでブラウズ JavaのSOCKET機能を使って、Webサーバのソースデータを取得するサンプルソースです。指定したURLのHTTPヘッダとHTMLソースを表示します。
PerlでブラウズのJava言語版です。正規表現を利用するため、OROパッケージが必要です。
SOCKET機能は、java.net.*にありますので、java.net.*をimportします。また、SOCKETデータは、ストリームとして扱うため、java.io.*もimportします。データ転送の効率を考えて、BufferReader, BufferWriterを使っています。
Socketオブジェクトを作成し、入出力バッファを関係付けます。 HTTPプロトコルに基づいて、GETコマンドをBufferWriterに出力すると、BufferReaderにソースが返却されます。 BufferWriterに出力する場合は、最後にバッファをflushする必要があります。
以下のソース(Http.java)を入力してください。
Http.java
import java.io.*;
import java.net.*;
import org.apache.oro.text.perl.*;
/** Httpプロトコルによるソース表示 **/
public class Http {
public static void main(String args[]) {
String url;
String host = "localhost";
int port = 80;
String path = "/";
Socket sock;
BufferedReader sockin;
BufferedWriter sockout;
String str;
if (args.length > 0) {
url = args[0];
Perl5Util re = new Perl5Util();
// ホスト名、ポート番号、パス名取得
if (re.match("m!(http:)?(//)?([^:/]*)?(:([0-9]+)?)?(/.*)?!", url)) {
if (re.group(3) != null) { host = re.group(3); }
if (re.group(5) != null) { port = (new Integer(re.group(5))).intValue(); }
if (re.group(6) != null) { path = re.group(6); }
}
} else {
url = "http://" + host + ":" + port + path;
}
// System.out.println("host=" + host + ", port=" + port + ", path=" + path);
try {
// ソケットの作成
sock = new Socket(host, port);
sockin = new BufferedReader(new InputStreamReader(sock.getInputStream()));
sockout = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream()));
// HTTPリクエスト送信
sockout.write("GET " + url +" HTTP/1.1\r\n");
sockout.write("Host: " + host + "\r\n");
sockout.write("Connection: close\r\n");
sockout.write("\r\n");
sockout.flush();
// HTTPレスポンス受信
while ((str = sockin.readLine()) != null) {
System.out.println(str);
}
// ソケットのクローズ
sockout.close();
sockin.close();
sock.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
ソースをコンパイルして実行します。
unix# javac Http.java
unix# java Http http://ash.jp/
HTTP/1.1 200 OK
Date: Fri, 22 Jun 2001 06:43:49 GMT
Server: Apache/1.3.20 (Unix)
Content-Type: text/html
Content-Length: 5752
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<html lang="ja">
<head>
.......... (以下略)
URLConnectionでブラウズ Javaでは、Web上のデータを簡単にアクセスできるように、java.net.URLConnectionクラスがあります。 HTTP独自の機能を使うためには、java.net.HttpURLConnectionクラスがあります。
ここでは、HttpURLConnectionクラスを使って、ホームページのソースを表示してみます。
URLConnectionクラスを使うためには、URLオブジェクトが必要です。 URLオブジェクトの作成方法は、プロキシサーバを使う場合と、使わない場合で異なります。プロキシサーバを使う場合は、proxyHostとproxyPortに、プロキシサーバのホスト名とポート番号を設定します。
URLオブジェクトを作成したら、openConnectionメソッドで、URL接続し、setRequestMethodメソッドでGETします。
レスポンスはInputStreamとして返却されますので、行単位でアクセスするために、BuffredReaderクラスを使い、その内容を表示しています。
HttpUrl.java
import java.io.*;
import java.net.*;
/** Httpプロトコルによるソース表示(HttpURLConnectionクラス利用) **/
public class HttpUrl {
public static void main(String args[]) {
String url = "http://ash.jp/";
String proxyHost = "";
int proxyPort = 8080;
URL urlObj;
HttpURLConnection urlCon;
BufferedReader urlIn;
String str;
if (args.length > 0) {
url = args[0];
}
// System.out.println("URL: " + url);
try {
// URLオブジェクトの作成
if (proxyHost == null) {
urlObj = new URL(url);
} else {
urlObj = new URL("http", proxyHost, proxyPort, url);
}
// URL接続
urlCon = (HttpURLConnection)urlObj.openConnection();
urlCon.setRequestMethod("GET");
urlIn = new BufferedReader(new InputStreamReader(urlCon.getInputStream()));
// HTMLソースの表示
while ((str = urlIn.readLine()) != null) {
System.out.println(str);
}
// URL切断
urlIn.close();
urlCon.disconnect();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
ソースをコンパイルして実行すると、SOCKETを使った場合と同じ結果が表示されます。
unix# javac HttpUrl.java
unix# java HttpUrl http://ash.jp/
HTTP/1.0 200 OK
Date: Fri, 25 Jun 2001 23:33:00 GMT
Server: Apache/1.3.20 (Unix)
Content-Type: text/html
Content-Length: 5752
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<html lang="ja">
<head>
.......... (以下略)
--------------------------------------------------------------------------------
|
|