PHP curl 如何在使用代理时检索 header 。 CURLOPT_HEADERFUNCTION?

标签 php curl proxy

我正在使用这样的代理连接到一个站点:

$curl = curl_init();
curl_setopt($curl, CURLOPT_PROXY, $proxy);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, 1); 
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);  
curl_setopt($curl, CURLOPT_HEADER, TRUE);
$result = curl_exec ($curl);

问题是 CURLOPT_HEADER 从代理连接返回 header ,而我需要从实际请求到 URL 的 header 。我相信解决方案涉及使用 CURLOPT_HEADERFUNCTION 但我不明白如何使用它。

我试过这个(取自 SO 的其他地方):

curl_setopt($curl, CURLOPT_HEADERFUNCTION, "HandleHeaderLine");

使用函数:

function HandleHeaderLine($curl, $header_line ) {
    echo "<br>YEAH: ".$header_line; // or do whatever
    return strlen($header_line);
}

但是我好像只能返回字节数。我不确定如何获得实际值(value)。在我的情况下,我只想要 Location header 。

谢谢。

最佳答案

CURLOPT_HEADERFUNCTION 的匿名回调将需要访问您要在其中存储 header 信息的变量。有几种不同的方法,但这里有一些例子:

使用使用:

$headers = [];
...
function HandleHeaderLine($curl, $header_line) use (&$headers)
{
    ...
    if ($isHeaderIWant) {
        $header[] = 'some info';
    }
    return strlen($header_line);
}

使用类属性:

private $headers = [];
...
function HandleHeaderLine($curl, $header_line)
{
    ...
    if ($isHeaderIWant) {
        $this->header[] = 'some info';
    }
    return strlen($header_line);
}

关于PHP curl 如何在使用代理时检索 header 。 CURLOPT_HEADERFUNCTION?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32653598/

相关文章:

php - Eloquent 从数据库中选择,获取比给定 unix 时间戳更新的结果

php - 使用 CURL 发布多维数组并在服务器上获取结果

java - 从 java(图像和一些参数)发送表单数据,如 curl

unit-testing - Magento 2 : Proxy and Factory generation in unit tests scope

php - Mysql在指定时间范围内按用户ID获取最后更新

PHP在mysql中搜索多个关键字

Php通过代理请求

java - OkHTTPClient Proxy 认证如何进行?

php - 删除字符串php中的数字

php - 如何解决 Laravel 安装上 MAC OS 上的 curl 证书问题?