#########################
###auto test ############
#########################
#use XML::Simple;
#use Data::Dumper;
#use IO::Socket;
use Socket;
#use Test::HTTP
#$autotestxml="d:/autotest.xml";
#if(open(AUTO,$autotestxml))
#print("open autotesting xml ok!\n");
##here parsing the xml files to test cases
#}
#else
#{
#die("open error!\n $!");
#exit(-1);
#}
#close(AUTO);
#@testcases=;
#my $newxml=new XML::Simple;
#$testcases = $newxml->XMLin($autotestxml);
#print Dumper($testcases);
#print $testcase;
################
#intialize the sock
sub open_TCP
{
# get parameters
my ($FS, $dest, $port) = @_;
my $proto = getprotobyname('tcp');
socket($FS, PF_INET, SOCK_STREAM, $proto);
my $sin = sockaddr_in($port,inet_aton($dest));
connect($FS,$sin) || return undef;
my $old_fh = select($FS);
$| = 1; # don't buffer output
select($old_fh);
return 1;
}
sub get_url
{
my ($url) = @_;
if ($url =~ /^http:\/\/(.+?):([0-9]+)\//) {
$web_server = $1;
$port = $2;
}
elsif ($url =~ /^http:\/\/(.+?)\// ) {
$web_server = $1;
$port = 80;
}
else {
print "plz give the correct url\n";
exit(-1);
}
#print $web_server.":".$port."\n\n";
if (open_TCP(F, $web_server, $port) == undef) {
print "Error connecting to server at $!\n";
exit(-2);
}
# http1.1 must send the host header , if not will server return 400
print F "GET ".$url." HTTP/1.1\r\n";
print F "HOST: $web_server\r\n";
print F "Connection: Close\r\n\r\n";
# connetion: close will close the session imediertly after returns.
#print F "Accept: */*\r\n\r\n";
#print F "Accept-Language: zh-cn\r\n\r\n";
#print F "Accept-Encoding: gzip,deflate\r\n";
#print F "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)\r\n\r\n";
#print F "Proxy-Connection: Keep-Alive\r\n\r\n";
#print F "Accept-Language: zh-cn,zh;q=0.5\r\n";
#print F "Accept-Encoding: gzip,deflate\r\n";
my @return_line=<F>;
#print @return_line;
close(F);
my @headers,@contents;
my $lines = 0;
my $found_gap=0;
while ($lines <= @return_line) {
#print $lines;
if ($found_gap == 0) {
push (@headers,@return_line[$lines]);
}
if($found_gap ==1){
push (@contents,@return_line[$lines]);
}
if (@return_line[$lines] =~ /^\r$/ && !$found_gap) {
#print "found the gap bettween the headers and content.\n";
$found_gap=1;
}
$lines ++;
}
print @headers;
print "##########\n";
print @contents;
return @contents;
}
####################post data#######################
#########return the body############################
####################################################
sub post_url
{
my ($url,$post_data,$urlencode_need) = @_;
if ($url =~ /^http:\/\/(.+?):([0-9]+)\//) {
$web_server = $1;
$port = $2;
}
elsif ($url =~ /^http:\/\/(.+?)\// ) {
$web_server = $1;
$port = 80;
}
else {
print "plz give the correct url\n";
exit(-1);
}
$length = length($post_data);
if ($urlencode_need) {
#$post_data =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg;
$length = "57";
#length($post_data);
print "urlencoded data: $post_data\n";
}
#print $web_server.":".$port."\n\n";
if (open_TCP(F, $web_server, $port) == undef) {
print "Error connecting to server at $!\n";
exit(-2);
}
print F "POST ".$url." HTTP/1.1\r\n";
#print F "Accept: */*\r\n";
#print "Accept: */*\r\n";
#print F "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.18) Gecko/2010020220 Firefox/3.0.18\r\n";
print F "Content-Type: application/x-www-form-urlencoded\r\n";
print F "Content-Length: ".$length."\r\n";
#print "Content-Length: ".$length."\r\n";
print F "Host: $web_server\r\n";
#print F "Keep-Alive: 100\r\n";
#print F "Pragma: no-cache\r\n";
print F "Connection: Close\r\n\r\n";
#print "POST data: $post_data\r\n";
print F "$post_data\r\n";
my @return_line=<F>;
my @contents;
my @headers;
#print @return_line;
close(F);
my $lines = 0;
my $found_gap=0;
while ($lines <= @return_line) {
#print $lines;
if ($found_gap == 0) {
push (@headers,@return_line[$lines]);
}
if($found_gap ==1){
push (@contents,@return_line[$lines]);
}
if (@return_line[$lines] =~ /^\r$/ && !$found_gap) {
#print "found the gap bettween the headers and content.\n";
$found_gap=1;
}
$lines ++;
}
print "\n###############################################################\n";
print "Post Url: $url\n";
print "Post Data: $post_data\n";
print "#######################return headers##########################\n";
print @headers;
#print "#####body#####\n";
#print @contents;
return @contents;
}
|