You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Net::Whois::Raw模块适配代理解决报错问题?

解决Net::Whois::Raw代理环境下的配置问题

我来帮你搞定这个代理适配的问题~你遇到的报错核心原因是代理环境里模块没拿到正确的代理配置,没法正常连接whois服务器。下面给你几种不同场景的配置方案,按需选就行:

方案1:通过环境变量设置(简单快捷)

这种方式兼容性最好,不管模块用HTTP请求还是底层TCP连接,大多工具都会自动读取这些环境变量:

终端临时设置(运行脚本前执行)

在终端里先配置好环境变量再启动脚本:

# HTTP/HTTPS代理基础配置
export HTTP_PROXY=http://your-proxy-host:port
export HTTPS_PROXY=https://your-proxy-host:port

# 如果代理需要用户名密码认证
export HTTP_PROXY=http://username:password@your-proxy-host:port
export HTTPS_PROXY=https://username:password@your-proxy-host:port

# 可选:指定不需要走代理的内部域名
export NO_PROXY=whois.your-company.com,internal-domain.net

脚本内直接设置

不想每次手动输环境变量的话,直接在脚本开头定义:

use Net::Whois::Raw;

# 配置代理环境变量
$ENV{HTTP_PROXY} = 'http://proxy.example.com:8080';
$ENV{HTTPS_PROXY} = 'https://proxy.example.com:8443';
# 带认证的情况
# $ENV{HTTP_PROXY} = 'http://user:pass@proxy.example.com:8080';

# 你的原有代码
my $host = shift;
$Net::Whois::Raw::CHECK_FAIL = 1;
$Net::Whois::Raw::OMIT_MSG = 1;
my $whois_raw = whois($host);
print $whois_raw;

方案2:直接配置模块的UserAgent(更灵活)

Net::Whois::Raw底层会用LWP::UserAgent处理HTTP类型的whois请求,你可以手动初始化一个配置好代理的UA实例,绑定给模块的全局变量:

use Net::Whois::Raw;
use LWP::UserAgent;

# 创建并配置UserAgent
my $ua = LWP::UserAgent->new;
# 设置HTTP/HTTPS代理
$ua->proxy(['http', 'https'], 'http://proxy.example.com:8080');

# 如果代理需要认证,添加凭据(Realm Name可留空或咨询管理员)
$ua->credentials(
    'proxy.example.com:8080', 
    'Proxy Realm', 
    'your-username', 
    'your-password'
);

# 将配置好的UA绑定到Net::Whois::Raw
$Net::Whois::Raw::UA = $ua;

# 你的原有代码
my $host = shift;
$Net::Whois::Raw::CHECK_FAIL = 1;
$Net::Whois::Raw::OMIT_MSG = 1;
my $whois_raw = whois($host);
print $whois_raw;

方案3:适配SOCKS代理(针对TCP直连的whois服务)

有些whois请求是直接通过TCP连接43端口的,这时候HTTP代理没用,得用SOCKS代理,借助IO::Socket::Socks全局配置:

use Net::Whois::Raw;
use IO::Socket::Socks;

# 设置SOCKS代理参数
IO::Socket::Socks->set_defaults(
    ProxyAddr => 'socks-proxy.example.com',
    ProxyPort => 1080,
    # 带认证的情况
    AuthType => 'userpass',
    Username => 'your-username',
    Password => 'your-password'
);

# 你的原有代码
my $host = shift;
$Net::Whois::Raw::CHECK_FAIL = 1;
$Net::Whois::Raw::OMIT_MSG = 1;
my $whois_raw = whois($host);
print $whois_raw;

小提醒

  • 先确认你的代理类型:公司内网一般是HTTP代理,翻墙场景常是SOCKS代理。
  • 拿不准的话先试方案1,不行再换对应场景的方案。

内容的提问来源于stack exchange,提问作者jsor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:29:34