强制将HTTP代理与已经使用LWP :: UserAgent的模块一起使用?

时间:2019-07-03 19:31:02

标签: perl

我想将代理服务器与第三方SDK结合使用,但是SDK在内部使用LWP :: UserAgent,并且不会在其API中公开任何代理设置。我尝试设置适当的环境变量,但是模块似乎无法识别它。有没有解决的办法(无需修改模块本身)?

$ENV{HTTPS_PROXY} = 'http://$proxyip:$proxyport';

my $s = NaServer->new ($filer, 1, 20);
$s->set_style(LOGIN);
$s->set_transport_type(HTTPS);
$s->set_server_type(FILER);
$s->set_port(443);
$s->set_admin_user($user, $pass);
$s->env_proxy;

[john0839 @ 478261-apps〜] $ ./netapp_command_proxy.pl filerip myuser mypass 在netapp-manageability-sdk-9.4 / lib / perl / NetApp / OntapClusterAPI.pm第109445行中找不到API env-proxy的定义。

1 个答案:

答案 0 :(得分:1)

您已经确定需要在UserAgent对象上调用env_proxy()。但是看来NaServer不是LWP::UserAgent的子类,因此您不能像在示例代码中尝试的那样在该类上调用方法。

让我们看看the documentation for LWP::UserAgent的线索。 section for new()有一些有趣的文字。

  

如果未提供env_proxy,则PERL_LWP_ENV_PROXY环境变量控制是否在初始化期间调用LWP :: UserAgent中的“ env_proxy”。

在我看来,正是为此情况提供了此功能。如果您无权访问该对象的构造函数,则可以使用此环境变量来控制代理的使用。构造函数中的代码如下:

my $env_proxy = exists $cnf{env_proxy} ? delete $cnf{env_proxy} : $ENV{PERL_LWP_ENV_PROXY};

然后,

$self->env_proxy if $env_proxy;

所以解决方法似乎是要添加:

$ENV{PERL_LWP_ENV_PROXY} = 1;

位于代码顶部。

(N.B。我没有时间去测试。)