PHP - 使用 CURL 获取"X-错误-XXX"响应标头



因此,PHP确实具有一个可以连接,发布和下载的内容的卷曲接口。我也可以

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

但是如何获取X-XYZ响应标头?

例如,API可能会向我发送有关键是否有效/无效/已经使用的信息

通过

  • X-ERROR
  • X-ERROR-CODE

不幸的是,我无法找到这些标头/找不到一个。

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

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

和API的性质,将令牌的使用限制为单一用途。

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

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

我无法重复使用令牌,下一个实际请求。

如果PHP卷曲具有选项,则包括这些X-XYZ标头在curl_getinfo的响应中,那么,这种功能将是有用的

解决方案:

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

tl; dr

使用

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

我使用此功能从卷曲响应中获取和解析标头 - 这是一个示例:

$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-标头都存在于生成的数组中,我们可以一击和响应一起查看它们。

最新更新