PHP - FETCH THE" X-ERROR-XXX" CURL的响应标头

时间:2017-04-21 06:01:04

标签: php curl

SO PHP有一个curl界面,我可以连接,发布和下载内容。 我也可以

  1. 通过CURLOPT-HEADER获取响应标头,并将其他选项设置为true。
  2. 使用curl_getinfo
  3. 以数组形式获取响应

    但我如何获取X-XYZ响应标题?

    例如,API可能会向我发送有关密钥是否有效/已使用

    的信息

    通过

    • X-ERROR
    • X-ERROR-CODE

    不幸的是,我无法获取这些标题/无法找到它。

    我可以将CURLOPT_HEADER设置为TRUE,然后执行CURL,

    但是,我需要具有相同访问令牌的重复请求/帖子

    API的性质限制了令牌在单一用途中的使用。

    对于那些可能会建议curlopt_header的人,请注意

      

    我使用令牌一次,将该选项设置为true,并且我耗尽了API令牌。

    我无法重复使用令牌,以便接下来发出实际请求。

    如果PHP CURL有一个选项,在curl_getinfo的响应中包含这些X-XYZ标题,那么,这样的功能将是有用的

    解:

    @billynoah写了一个绝对的宝石。请参阅下文。您可以使用写回标头的功能,也可以编写自己的功能。但

      

    TL; DR

         

    USE

         

    curl_setopt(<your-curl-handle>, CURLOPT_HEADERFUNCTION, <your-custom-header-collector-function>);

1 个答案:

答案 0 :(得分:0)

我使用此函数来获取和解析卷曲响应中的标题 - 这是一个示例:

$headers = array();
$url = 'http://stackoverflow.com/questions/43535006/php-fetch-the-x-error-xxx-response-headers-with-curl';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HEADERFUNCTION, 'readHeader');
$result = curl_exec($curl);
print_r($headers);
curl_close($curl);

function readHeader($ch, $header) {
    global $headers;
    if (trim($header)) {
        $parts = explode(':',$header,2);
        $parts = array_map('trim',$parts);
        if (count($parts) == 2) {
            $headers[$parts[0]] = $parts[1];
        } else if (!isset($headers['http_code'])) {
            $headers['http_code'] = trim($header);
        } else {
            $headers[] = trim($header);
        }   
    }   
    return strlen($header);
}

<强>响应:

Array
(
    [http_code] => HTTP/1.1 200 OK
    [Content-Type] => text/html; charset=utf-8
    [X-Frame-Options] => SAMEORIGIN
    [X-Request-Guid] => 9df57b2d-df0a-4902-93f6-1dca0faab9d5
    [Content-Length] => 73067
    [Accept-Ranges] => bytes
    [Date] => Fri, 21 Apr 2017 06:33:33 GMT
    [Via] => 1.1 varnish
    [Age] => 0
    [Connection] => keep-alive
    [X-Served-By] => cache-jfk8122-JFK
    [X-Cache] => MISS
    [X-Cache-Hits] => 0
    [X-Timer] => S1492756414.633607,VS0,VE15
    [Vary] => Fastly-SSL
    [X-DNS-Prefetch-Control] => off
    [Set-Cookie] => prov=3cecd5a6-44ca-d63a-439e-921bc200d61d; domain=.stackoverflow.com; expires=Fri, 01-Jan-2055 00:00:00 GMT; path=/; HttpOnly
    [Cache-Control] => private
)

如您所见,结果数组中存在所有X-标题,我们可以一次性查看它们以及响应。