首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP curl如何在使用Proxy时检索报头。CURLOPT_HEADERFUNCTION?

PHP curl如何在使用Proxy时检索报头。CURLOPT_HEADERFUNCTION?
EN

Stack Overflow用户
提问于 2015-09-18 21:43:23
回答 1查看 1K关注 0票数 4

我正在使用如下代理连接到一个站点:

代码语言:javascript
复制
$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从代理连接返回报头,而我需要从实际请求中返回报头。我相信解决方案涉及到使用CURLOPT_HEADERFUNCTION,但我不知道如何使用它。

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

代码语言:javascript
复制
curl_setopt($curl, CURLOPT_HEADERFUNCTION, "HandleHeaderLine");

使用函数:

代码语言:javascript
复制
function HandleHeaderLine($curl, $header_line ) {
    echo "<br>YEAH: ".$header_line; // or do whatever
    return strlen($header_line);
}

但似乎我只能返回字节数。我不确定如何获得实际的值。在我的情况下,我只需要Location头。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2018-08-03 03:51:49

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

使用use

代码语言:javascript
复制
$headers = [];
...
function HandleHeaderLine($curl, $header_line) use (&$headers)
{
    ...
    if ($isHeaderIWant) {
        $header[] = 'some info';
    }
    return strlen($header_line);
}

使用class属性:

代码语言:javascript
复制
private $headers = [];
...
function HandleHeaderLine($curl, $header_line)
{
    ...
    if ($isHeaderIWant) {
        $this->header[] = 'some info';
    }
    return strlen($header_line);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32653598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档