【问题标题】:PHP cURL CURLOPT_HEADERFUNCTION failing with cURL code 23: Failed writing headerPHP cURL CURLOPT_HEADERFUNCTION 以 cURL 代码 23 失败:写入标头失败
【发布时间】:2021-07-21 12:57:47
【问题描述】:

我正在尝试使用 PHP cURL 库对 API 进行简单调用以检索数据。我希望能够存储响应标头和响应正文,为此我使用CURLOPT_HEADERFUNCTION,如下所示:

$headers = [];

curl_setopt(
    $cURLHandle,
    CURLOPT_HEADERFUNCTION,
    function ($cURLHandle, $header) use (&$headers) {
        $pieces = explode(":", $header);
        if (count($pieces) >= 2) $headers[trim($pieces[0])] = trim($pieces[1]);
    }
);

但是当我运行上面的代码时,它会产生cURL error #23: Failed writing header

为什么会发生这种情况,我该如何解决?

【问题讨论】:

    标签: php curl php-curl


    【解决方案1】:

    发生这种情况是因为需要从您为CURLOPT_HEADERFUNCTION 提供的函数返回标头长度(以字节为单位)。

    相信,虽然我不确定,这是因为 PHP 需要/希望能够报告来自 curl_getinfo(...) 调用的标头长度。

    固定的代码如下所示:

    $headers = [];
    
    curl_setopt(
        $cURLHandle,
        CURLOPT_HEADERFUNCTION,
        function ($cURLHandle, $header) use (&$headers) {
            $pieces = explode(":", $header);
            if (count($pieces) >= 2) $headers[trim($pieces[0])] = trim($pieces[1]);
            return strlen($header); // <-- this is the important line!
        }
    );
    

    【讨论】:

      猜你喜欢
      • 2023-02-17
      • 2016-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-05
      • 2019-06-05
      • 2018-06-06
      • 2016-04-19
      相关资源
      最近更新 更多