perl socket 模拟http请求

通过perl的socket模拟http请求, 包括字符编码转换,格式化时间,文件写入操作

#!/usr/bin/perl
#
use Socket;
use POSIX qw(strftime);
use Encode;
use File::Basename;
#
#
#
$dir = dirname( __FILE__)."/";
#print("start to maintain...\n");
# ntplgz.lzyy.cn 172.17.30.16
$defualt_host = '172.17.30.16';
$default_host = '192.168.10.64';
$addr = $ARGV[0]||$default_host;
$port = $ARGV[1]||'80';
$dest = sockaddr_in($port, inet_aton($addr));

$buf = undef;

socket($sock, PF_INET, SOCK_STREAM, 6) or die "Can't create socket: $!\n";
connect($sock, $dest) or die "Can't connect:$!\n";
#print "connect success\n";

#定义参数
$dt = get_format_date("%m/%d/%Y");
#$dt = "5/27/2017";
$proc = "gz_goods_maintain_task";
$k0 = "list{'$dt'}";

$content = "Mis=lzmis&proc=$proc&k0=$k0";
$contentLength = length($content);
$headers = "GET /entrance.do?disable_verify=disable_verify_fais6yr8273y&verify=save&$content HTTP/1.0\r\n".
	   "Accept:*/*\r\n".
	   "Host:$default_host\r\n".
	   "Connection:close\r\n".
	   "User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) Chrome/56.0.2924.87 GzPerlHttpClient/1.0\r\n".
	   "\r\n";

#print "start to send data to server ... \r\n";
#print $content."\r\n";
send($sock, $headers, 0, $dest);
#print "receive data from server ...\r\n";
recv($sock, $buf, 2048,0);

#转utf-8
$buf = encode("utf-8",decode("gbk",$buf));
#print $buf."\r\n";
#只读取消息体
@buf = split(/\r\n\r\n/, $buf);
print $buf[1];
#写日志
$filename = $dir."logs/".get_format_date("%Y%m").".txt";
write_log_file($filename, get_format_date("%Y-%m-%d %H:%M:%S")."\r\n".$buf[1]."\r\n\r\n");

print "\r\n";


close $sock;



#格式化本地时间
sub get_format_date{
  my $format = $_[0];
  if ( !$format ) {
    $format = "%Y-%m-%d %H:%M:%S";
  }
  my $date = strftime $format, localtime;
  return $date;
}

sub write_log_file{
  my $file = $_[0];
  my $content = $_[1];
  open($file, "+>>".$file);
  print $file $content;
  close($file);
}

  

补充协议获取方式:

$host = '192.168.10.222'; #主机地址
$port = 80;              #端口


#使用tcp协议
$proto = getprotobyname('tcp');
#生成访问地址
$iaddr = inet_aton($host);
$paddr = sockaddr_in($port,$iaddr);
#创建socket
socket(SOCK,PF_INET,SOCK_STREAM,$proto) or die "socket:$!";
#将socket连接到访问地址
connect(SOCK,$paddr) or die "connect :$!" ;

 

posted @ 2017-06-02 10:39  半岛拖鞋  阅读(447)  评论(0)    收藏  举报