1

我目前正在尝试集成一个使用fopen()php://memory来捕获 Curl 标头的类。总是有更好的方法来捕获 Curl 标头,但我现在没有足够的时间编写自己的类。

问题是没有捕获标头信息。代码如下:

    $response_headers_fh = fopen('php://memory', 'wb+');

    $ch->setOpt(CURLOPT_WRITEHEADER, $response_headers_fh);

    $ch->raw_response = curl_exec($ch->curl);

    rewind($response_headers_fh);
    $ch->raw_response_headers = stream_get_contents($response_headers_fh);
    fclose($response_headers_fh);

此时,Curl 请求后,$ch->raw_response_headers属性为空。但是,如果我指定一个文件路径:

    $response_headers_fh = fopen('/tmp/random_string', 'wb+');

    $ch->setOpt(CURLOPT_WRITEHEADER, $response_headers_fh);

属性$ch->raw_response_headers设置正确...

我们的 PHP 版本是:

$ php -v
PHP 5.3.3 (cli) (built: Sep 10 2014 07:51:23)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
    with Xdebug v2.2.5, Copyright (c) 2002-2014, by Derick Rethans

有点懵...

4

1 回答 1

1

curl 无法写入php://memory流是合理的。有一个旧的错误报告似乎直到现在都没有解决。但是您可以使用CURLOPT_HEADERFUNCTION-option 来捕获标头:

function MyHeaderFunction($ch, $header)
{
    echo 'Header = ' . $header;
    return strlen($header);
}

$ch->setopt(CURLOPT_HEADERFUNCTION, 'MyHeaderFunction');

curl_exec($ch->curl);
于 2014-12-18T15:43:51.997 回答