HTTPプロトコル:httpクライアント(perlでのサンプル)
技術ドキュメント目次 -> HTTPプロトコル -> httpクライアント(perlでのサンプル)本技術ドキュメントは、2002~2004年頃に作成したものが多いです。
内容が古くなっていることもあるかと思いますが、ご了承ください。
【低価格SSL証明書】弊社運営の低価格SSL証明書販売サイト、翌月末払いなど請求書払いも可能。
◆ httpクライアント(perlでのサンプル)
HTTP のリクエストを発生させるアプリケーションの、Perlのサンプルコードを下に載せますので、
各種開発のご参考にしてみてください。
プログラム内では、HTTP1.0で指定したファイルをGETし、
得られたレスポンスを全て(ヘッダも含めて)標準出力します。
User-Agent等のヘッダは送信しません。
Keep-Alive はしないで、1回のセッションが終了したら、すぐ
closeします。
なお、
引数については次のように指定してください。
第1引数のみ必須です。
第1引数:httpd server のホスト名
第2引数:リクエストするURI(デフォルト値は /)
第3引数:リクエストするポート番号(デフォルト値は 80)
◆ perlのhttpクライアント
Web用の専用モジュールなどは使用しないで、use Socket; でソケットを使用してアクセスしています。
#!/usr/bin/perl # Copyright (C) 2006 Slogical Corporation use Socket; use strict; ## ヘルプメッセージの表示 ## --------------------------------------- if ($ARGV[0] eq "-h") { print STDERR "1st arg is HOSTNAME of httpd server (required).\n"; print STDERR "2nd arg is URI of request (default is '/')\n"; print STDERR "3rd arg is PORT_NO of httpd server (default is 80)\n"; exit(1); } ## 引数のチェック ## --------------------------------------- my $target_host = $ARGV[0]; if ($target_host eq "") { print STDERR "1st arg must be HOSTNAME of httpd server.\n"; print STDERR "if you want to show help, run '" . $0 . " -h'\n"; exit(-1); } my @target_addr = unpack('C4', (gethostbyname($target_host))[4]); if ($target_addr[0] !~ /^[0-9]+$/ || $target_addr[0] < 0 || $target_addr[0] > 256 || $target_addr[1] !~ /^[0-9]+$/ || $target_addr[1] < 0 || $target_addr[1] > 256 || $target_addr[2] !~ /^[0-9]+$/ || $target_addr[2] < 0 || $target_addr[2] > 256 || $target_addr[3] !~ /^[0-9]+$/ || $target_addr[3] < 0 || $target_addr[3] > 256) { print STDERR "can not resolve ipaddress of httpd server.\n"; exit(-1); } my $target_addr = $target_addr[0] . "." . $target_addr[1] . "." . $target_addr[2] . "." . $target_addr[3]; my $target_uri = "/"; if ($ARGV[1] ne "") { $target_uri = $ARGV[1]; } if ($target_uri !~ /^\//) { print STDERR "URI of request must be started with '/'\n"; exit(-1); } my $target_port = "80"; if ($ARGV[2] ne "") { $target_port = $ARGV[2]; } if ($target_port < 0 || $target_port > 65536) { print STDERR "PORT_NO of httpd server is invalid\n"; exit(-1); } ## httpのリクエスト・レスポンスを格納する変数 ## --------------------------------------- my $http_req; my $http_res; ## httpリクエストの定義 ## --------------------------------------- $http_req = "GET " . $target_uri . " HTTP/1.0\r\n"; $http_req .= "Host: " . $target_host . "\r\n"; $http_req .= "\r\n"; ## ソケットを作成して、コネクトする ## --------------------------------------- socket(SOCK, PF_INET,SOCK_STREAM, getprotobyname('tcp')) || die(); select SOCK; $| =1; select STDOUT; my $sockaddr = sockaddr_in($target_port, inet_aton($target_addr)); connect(SOCK,$sockaddr) || die(); ## リクエスト送信 ## --------------------------------------- print SOCK $http_req; ## レスポンス受信 ## --------------------------------------- while (<SOCK>) { $http_res .= $_; } ## ソケットを閉じる ## --------------------------------------- close(SOCK); ## 取得したコンテンツを標準出力 ## --------------------------------------- print $http_res; exit(0); |
■ HTTPプロトコル についての他のドキュメント
- Basic認証の動作
- If-Modified-Sinceヘッダ
- httpクライアント(C言語でのサンプル)
- httpクライアント(perlでのサンプル)
- httpのレスポンスコード
■ 他のグループのドキュメント
Apache / Linux / FreeBSD / OpenSSL / Perl / HTTPプロトコル / Jakarta Tomcat / Java / NetBSD / Oracle / PostgreSQL / UNIX の C言語 / UNIX のコマンド / Windows / bind / システム運用TIPS