Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
#!/usr/local/bin/perl -w
# $Id: http-client-2.pl,v 1.2 2002/02/05 17:53:09 68user Exp $
use Socket; # Socketモジュールを使う
#----------------引数解析--------------------
# メソッドを解析。-HEADか-GET以外ならエラー
if ( $ARGV[0] eq "-HEAD" || $ARGV[0] eq "-head" ){
$method = "HEAD";
} elsif ( $ARGV[0] eq "-GET" || $ARGV[0] eq "-get" ){
$method = "GET";
} else {
print "methodはGETかHEADを指定してください。\n";
exit;
}
# URLを解析。http://host/pathという形式でなければエラー
if ( $ARGV[1] =~ m|^http://([-_\.a-zA-Z0-9]+)/?(.*)$| ){
$host = $1;
$path = $2;
} else {
print "URLは http://host/path という形式で指定してください。\n";
exit;
}
# 引数が3つあるならProxyを解析
if ( $#ARGV == 2 ){
if ( $ARGV[2] =~ m|^([-_\.a-zA-Z0-9]+):(\d+)$| ){
$proxy = $1;
$port = $2;
$connect_host = $proxy;
} else {
print "Proxy は host:port という形式で指定してください。\n";
exit;
}
$connect_host = $proxy;
# 引数が2つしかないなら
} else {
$connect_host = $host;
$port = getservbyname('http', 'tcp');
}
#----------------接続処理-------------------
# ホスト名を、IPアドレスの構造体に変換
$iaddr = inet_aton($connect_host)
|| die "$connect_hostは存在しないホストです。\n";
# portとIPアドレスとまとめて構造体に変換
$sock_addr = pack_sockaddr_in($port, $iaddr);
# ソケット生成
socket(SOCKET, PF_INET, SOCK_STREAM, 0)
|| die "ソケットを生成できません。\n";
# 指定のホストの指定のportに接続
connect(SOCKET, $sock_addr)
|| die "$connect_host の ポート$portに接続できません。\n";
# ファイルハンドルSOCKETをバッファリングしない
select(SOCKET); $|=1; select(STDOUT);
#------------HTTPリクエスト送信-----------------
# Proxyサーバに接続するなら
if ( defined $proxy ){
print SOCKET "$method http://$host/$path HTTP/1.0\r\n";
# 直接WWWサーバに接続するなら
} else {
print SOCKET "$method /$path HTTP/1.0\r\n";
}
# User-Agentを送信
print SOCKET "User-Agent: httptalker/0.10 (HTTP client sample)\r\n";
print SOCKET "\r\n";
#------------サーバからのデータを受信 -----------------
if ( $method eq "GET" ){
# GETメソッドならヘッダ部分は表示せず
while (){
m/^\r\n$/ && last;
}
# ボディ部分だけを表示する
while (){
print $_;
}
} else {
# HEADメソッドなら全文表示
while (){
print $_;
}
}