2014-09-25 150 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