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

使用Net::Curl::Easy的pushopt设置PROXYHEADER时出现curl未知错误

问题解决:Perl中Net::Curl仅向代理发送自定义头

问题分析

你遇到的问题是:使用Perl的Net::Curl::Easy设置CURLOPT_PROXYHEADER时运行报错,换成HTTPHEADER虽能正常执行,但自定义头会同时发送给代理和目标服务器,不符合仅向代理传递授权信息的需求;而Python的pycurl用PROXYHEADER却能正常工作。

解决方案

问题出在Perl代码中pushopt的使用方式上。Net::Curl::Easy的pushopt用于追加选项值,但CURLOPT_PROXYHEADER需要用setopt来设置完整的头列表,而非追加。修改后的代码如下:

#!/usr/bin/perl -w

$| = 1;

use Net::Curl::Easy qw(:constants);
 
my $easy = Net::Curl::Easy->new();
$easy->setopt( CURLOPT_URL, "https://checkip.amazonaws.com/" );
$easy->setopt( CURLOPT_VERBOSE, 1 );
$easy->setopt( CURLOPT_PROXY_SSL_VERIFYPEER , 0 );
$easy->setopt(CURLOPT_PROXY_SSL_VERIFYHOST, 0);
$easy->setopt(CURLOPT_SSL_VERIFYPEER, 0);
$easy->setopt(CURLOPT_USERAGENT, "curl");
$easy->setopt(CURLOPT_PROXY, "http://35.244.25.186:3128"); # 代理地址
$easy->setopt(CURLOPT_HEADER, 1);
# 使用setopt而非pushopt设置PROXYHEADER
$easy->setopt(CURLOPT_PROXYHEADER, ['username: apikey']); 

$easy->perform();

原理说明

  • Net::Curl中,CURLOPT_PROXYHEADER属于设置型选项,需要用setopt直接赋值完整的头数组;pushopt适用于类似CURLOPT_HTTPHEADER这种需要多次追加头的场景,但即使是HTTPHEADER,用setopt也会覆盖原有头列表。
  • CURLOPT_PROXYHEADER的作用是仅将指定头发送给代理服务器,不会传递给目标站点,完全匹配你传递授权信息的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:42:21