codenamemessiah has asked for the wisdom of the Perl Monks concerning the following question:

Hey I wrote the following code to get the http page from a website. As sending request from behind the firewall,the request has to be sent via a proxy server whose address can be obtained from the ".pac" file.

use HTTP::ProxyPAC; my $pac = HTTP::ProxyPAC->new('c:\perl\proxypac.pac'); my $res = $pac->find_proxy('http://esto*******tt.coml'); #print $res; use LWP::Simple; use LWP::UserAgent; my $ua = LWP::UserAgent->new(); $ua->proxy('http',$res); my $content =$ua->get('http://esto*******tt.com'); print $content->content(); exit 0;

I think the $res is not getting the correct URI,how can I correct it.
Its value was HTTP::ProxyPAC::Result=HASH(0x33ad284)

The output is  500  no host option provided

I am using strawberry perl on windows vista. I have just starting learning Perl about 3 weeks ago so I request you to please be explanative.

One more thing just for if it helps, CPAN was not able to install modules too by the usual command " cpan < module name>" as I think the firewall is rejecting any request sent using LWP library( may be the problem is same with parsing the PAC file). I had to install modules manually.

Replies are listed 'Best First'.
Re: :Problem with Parsing the Proxy Auto Configure File
by Eliya (Vicar) on Feb 23, 2011 at 08:26 UTC
    $ua->proxy('http',$res);

    The documentation suggests you should call the ->proxy method on the result object to get the URI of the proxy:

    if ($res->proxy) { $ua->proxy(http => $res->proxy); }

      Hey Thanks very much.This works. I think I didn't read documentation well.

        hi, when i use HTTP::Proxypac, i get the below error "neither the JavaScript module nor the JS module seems to be available....." please let me know how to proceed.
Re: :Problem with Parsing the Proxy Auto Configure File
by Khen1950fx (Canon) on Feb 23, 2011 at 08:20 UTC
    Your proxy.pac should have the host in it. It seems to me that you might want to have a look at that. Also, you'll need to use a module like Data::Dumper or one of the other modules in that namespace to get a look at your results. Here's what I tried. I borrowed the proxy.pac from the test directory:

    proxy.pac

    function FindProxyForURL(url,host) { // loopback if ( host == "127.0.0.1" || host == "localhost" ) return "DIRECT"; if ( dnsDomainIs(host, "intra.example.com") ) return "PROXY proxy.example.jp:8080; DIRECT"; if ( isInNet(host, "192.168.108.0","255.255.255.0") ) return "DIRECT proxy.example.jp:8080"; return "PROXY"; }
    And the script that I came up with:

    proxy_pac.pl

    #!/usr/bin/perl use strict; use warnings; use HTTP::ProxyPAC; use LWP::UserAgent; use Data::Dumper::Perltidy; my $accessor = '/root/Desktop/proxy.pac'; my $ua = LWP::UserAgent->new(timeout => 30); undef $ua; my $pac = HTTP::ProxyPAC->new($accessor); print Dumper( my $res = $pac->find_proxy( 'http://www.intra.example.com/') );