perl-modperl mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Sumit Shah" <ss...@gce2000.com>
Subject RE: Mod_perl and HTTP IO issue
Date Thu, 09 Nov 2006 01:37:52 GMT
All,

I was able to figure out the issue below. However, I am now facing an
issue where if the response is 'VALID' it is not fetching the requested
page as could be implied by the return statement. Also, sometimes I
observed that even if the response is VALID, it still redirects to
GOOGLE. 

	#Check the status	
 	if ($result ="INVALID"){	
 		my $url1 = 'http://www.google.com';
 		$r->content_type('text/html');
 		$r->headers_out->set('Location' => $url1);
 		$r->status(Apache::Constants::REDIRECT);
         	return Apache::Constants::REDIRECT;
         }
 	return;

I would appreciate if you could point me to what I am doing wrong. 

Thanks
Sumit


> -----Original Message-----
> From: Sumit Shah 
> Sent: Wednesday, November 08, 2006 7:35 PM
> To: modperl@perl.apache.org
> Subject: Mod_perl and HTTP IO issue
> 
>  
> All,
> 
> I have a perl handler that invokes a servlet (HTTP IO) 
> running on a remote server. The servlet returns a single word 
> response (INVALID or VALID). The handler is supposed to 
> redirect the URL to some other website. For testing I 
> redirect it to Google. 
> The handler uses plain Socket implementation.  What I am 
> noticing is that the handler does invoke the servlet but does 
> read the response back. It seems like the connection gets 
> closed before the handler gets to read the response. 
> 
> But, if I run the handler as a standalone Perl script it 
> works as expected. Below is the handler code. It is under 
> Apache 1.3.x and Mod_perl 1.
> 
> I would appreciate any suggestions that you may have. 
> 
> Thanks
> Sumit
> 
> ##############################################################
> ##########
> ######
> package Apache::Proxy;
> 
> use strict;
> use mod_perl 1.17_01;
> use Apache::Constants qw(REDIRECT);
> use Apache::Constants qw(OK);
> use Socket;
> $Apache::Proxy::VERSION = "1.00";
> 
> sub handler {
> 
> 	my $r = shift;	
> 	
> 	my $url =
> "http://38.118.10.36/SSOWeb/servlet/SsoProxyServlet?ssotoken=0
> ee1978f-72
> 9f-4554-a4d2-5a7df7db7243";
> 	$url=~m/http\:\/\/([^\:^\/]*)(?:\:(\d+))?\/(.*)/;
> 	my $host = $1;
> 	my $port = $2;
> 	$port = 80 unless($port);
> 	my $file = '/'.$3;
> 	
> 	my $proto = getprotobyname('tcp');
> 	socket(SOCK, PF_INET, SOCK_STREAM, $proto);
> 	
> 	my $sin = sockaddr_in($port, inet_aton($host));
> 	
> 	connect(SOCK, $sin) || die "Connect failed: $!\n";
> 	
> 	my $old_fh = select(SOCK);
> 	$|=1;
> 	select($old_fh);
> 	
> 	print SOCK "GET $file HTTP/1.0\n";
> 	print SOCK "Accept: */*\n";
> 	print SOCK "User-Agent: webamp\n\n";
> 	
> 	my $header = <SOCK>;
> 	my $content; 
> 	my $out;
> 	
> 	#This part of the code reads the RESPONSE HEADER
> 	while($content = &sockread())
> 	{
> 	      $out .= $content;   
> 	      last if ($content =~ /^\015?\012?$/);
> 	}
> 	
> 	my $result='';
> 
> 	#READ THE RESPONSE BODY
> 	while (defined($content = <SOCK>)) {
> 		$result = $result . $content;
> 	}        
> 	
> 	#Check the status	
> 	if ($result =~ m/INVALID/i){	
> 		my $url1 = 'http://www.google.com';
> 		$r->content_type('text/html');
> 		$r->headers_out->set('Location' => $url1);
> 		$r->status(Apache::Constants::REDIRECT);
>         	return Apache::Constants::REDIRECT;
>         }
> 	return;
> }
> 
> #####################################################
> # Attempt to read a line.
> sub sockread () {
>   my $line;
>   
>   eval {
>       
>   	local$SIG{ALRM} = sub { die 'timeout!' };
> 	$line = <SOCK>;
> 	
>   };
>   if ($@ and $@ !~ /timeout!/) {warn("during socket read: $@\n")}
>   return $line;
> } #end
> 
> 

Mime
View raw message