2014-09-26 134 views
1

我试图使用cURL从PHP进行API调用。授权标头未使用PHP cURL设置

这是我的代码:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "http://localhost/api/"); 
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(array('sql' => $sql))); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: MY-API-KEY')); 
$response = curl_exec($ch); 
curl_close($ch); 

看来,如果授权头未设置。我尝试过Google,在那里有人说头没有被正确识别。谁能帮忙? 我的代码在没有授权的情况下可以用于API调用。

UPDATE: 通过调用命令行工具卷曲的命令:

curl -H 'Authorization: MY-API-KEY'... 

一切正常。

我对PHP cURL的反馈是“访问被拒绝”。

+0

我运行代码瓦特/ PHP 5.4 - Authorization-Header/is/set(我查阅了http://www.nirsoft.net/utils/smsniff.html)。所以我想这个问题在API方面。祝你好运! – 2014-09-26 13:28:18

+0

你得到了什么'$ response'?同时检查'curl_error()'。 – 2014-09-26 13:41:40

+0

我没有收到来自cURL的错误消息,但我从API获取“拒绝访问”。 – user809829 2014-09-28 09:00:31

回答

1

因为它看起来简化版,它的正确构造:

客户端:

当用户代理想要发送它可以使用授权头中的服务器身份验证凭据。

授权头构造如下:

的用户名和密码被组合成一个字符串“用户名:密码” 然后将得到的字符串使用的Base64的RFC2045-MIME变体编码,除了不限于76字符/行 授权方法和空间,即“基本”,然后放在编码的字符串之前。 例如,如果用户代理使用“阿拉丁”作为用户名和“芝麻开门”作为密码,然后报头被形成为如下:

授权:基本QWxhZGRpbjpvcGVuIHNlc2FtZQ ==

+0

从命令行工具调用相同的命令卷曲一切正常。这是我试图调用的API:http://docs.ckan.org/en/ckan-2.1.1/api.html#authentication-and-api-keys – user809829 2014-09-26 13:39:02