株式会社エスロジカル
株式会社エスロジカル
SSL証明書(3,300円/1年~ DV、OV、EV)、セキュリティ、Web開発、Linux開発、Go言語

HTTPプロトコル:httpクライアント(perlでのサンプル)

技術ドキュメント目次 -> HTTPプロトコル -> httpクライアント(perlでのサンプル)

本技術ドキュメントは、2002~2004年頃に作成したものが多いです。
内容が古くなっていることもあるかと思いますが、ご了承ください。

サイフにやさしいSSL証明書
【低価格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プロトコル についての他のドキュメント


■ 他のグループのドキュメント

Apache  /  Linux  /  FreeBSD  /  OpenSSL  /  Perl  /  HTTPプロトコル  /  Jakarta Tomcat  /  Java  /  NetBSD  /  Oracle  /  PostgreSQL  /  UNIX の C言語  /  UNIX のコマンド  /  Windows  /  bind  /  システム運用TIPS

アンケートにご協力をお願いいたします。

1. このドキュメントへの評価をご選択ください。
         

2. ご感想をお書きください。