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: suppressed
> 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: suppressed")}
> return $line;
> } #end
>
>
Mail converted by mhonarc 2.6.15
This archive provided courtesy of JSW4.NET, Internet Hosting Services for Small Business.