2014-09-25 132 views
0

我需要獲取位置標題。從我讀過的東西,這應該是越簡單CURLOPT_HEADER返回401

curl_setopt($c, CURLOPT_HEADER, true); 
curl_setopt($c, CURLOPT_FOLLOWLOCATION, false); 

如果我不包括兩個選項,捲曲請求工作正常,但我沒能獲得位置頭。

如果我確實包含這兩個選項,那麼我得到一個401錯誤。

正在返回的位置應該是一個需要額外登錄的URL。我究竟做錯了什麼?

如果它有所作爲,我正在做一個PUT。

更新: 原來我在樹上看得太多,在森林裏看不到太多。當生成迴應這個問題所需的信息時,我意識到問題實際上是在此次調用之前的呼叫。

在PUT之前,我需要獲得會話令牌。由於我在獲取會話標記時沒有解析出標題,因此我得到了一個空白的會話標記,這導致了PUT的401。

+0

響應頭** **包括對curl_exec'的'的結果,當你設置'CURLOPT_HEADER'選項。因此,如果你想得到一些響應頭,你必須使用'substr()'和'curl_getinfo(CURLINFO_HEADER_SIZE)'從結果中提取出來。' – hindmost 2014-09-25 15:40:23

+0

10.4.2 * 401未授權 - 請求需要用戶認證*。 [參考](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html) – 2014-09-25 15:45:08

回答

0

當您設置CURLOPT_HEADER選項時,HTTP響應標頭爲包括curl_exec的結果。所以如果你想獲得響應頭文件,你必須使用substr()curl_getinfo(CURLINFO_HEADER_SIZE)從結果中提取它。

這裏有一個例子:

$c = curl_init(); 
// setting options including CURLOPT_HEADER 
// ... 
$result = curl_exec($c); 
$info = curl_getinfo($c); 
curl_close($c); 
// extracting headers from result: 
$n = $info['header_size']; 
$headers = rtrim(substr($result, 0, $n)); 
$content = substr($result, $n); 
+0

是的,但是當我轉儲$結果,如果我設置CURLOPT_HEADER是一個401錯誤。如果我沒有設置CURLOPT_HEADER,那麼PUT工作正常,但由於我沒有設置CURLOPT_HEADER,所以不包含該位置。 – 2014-09-25 16:14:44

+0

您必須提供您使用CURL的完整代碼。否則我幫不了你 – hindmost 2014-09-25 17:32:46

+0

原來我在樹上看得太多,在森林裏看不到太多。當生成迴應這個問題所需的信息時,我意識到問題實際上是在此次調用之前的呼叫。 在PUT之前,我需要獲得會話令牌。由於我在獲取會話標記時沒有解析出標題,因此我得到了一個空白的會話標記,這導致了PUT的401。 將此標記爲問題提取標題後的答案。謝謝您的幫助! – 2014-09-26 15:47:59