2017-04-21 75 views
0

SO PHP有一個可以連接,發佈和下載內容的curl界面。 我也PHP - 使用CURL獲取「X-ERROR-XXX」響應頭文件

  1. 通過CURLOPT-HEADER並設置爲true,其他選項獲得響應頭。
  2. 得到的迴應作爲一個數組,curl_getinfo

但我如何獲取X-XYZ響應頭?

例如,API可以給我發信息有關的一個關鍵是有效/無效/已經通過

  • X-ERROR
  • X-ERROR-CODE

不幸的是二手

,我有沒有任何方法獲取這些標題/無法找到一個。

是否可以在CURLOPT_HEADERTRUE,然後執行卷曲,

但是,我需要用相同的訪問令牌

和API的性質重複請求/職位,限制使用一個令牌給單一用途。

對於那些誰可能會建議curlopt_header,請注意

我使用令牌一次,與該選項設置爲true,和我用盡API令牌。

我不能重複使用令牌,接下來的實際請求。

如果PHP CURL有一個選項,包括在curl_getinfo的響應,這些X-XYZ頭,那麼,這樣的功能將是有益的

SOLUTION:

@billynoah寫了一個絕對的寶石。請參閱下面的內容。您可以使用寫回標題的函數,也可以編寫自己的函數。但

TL; DR

使用

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

回答

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); 
} 

RESPONSE:

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-頭是目前所得數組中,我們能夠看到他們在一杆與響應一起。

+0

!感謝您及時的回覆。我正在嘗試這個。會讓你知道歡呼:) –

+0

它的工作原理! TYSM! @billynoah –