万向节API身份验证失败,401未经授权(PHP cURL请求)
我正在尝试连接万向节管理器Restful API。我有我的组织的帐户和API密钥。我的cURL请求不断失败,API端点发出401个未经授权的响应。以下是我在PHP中的cURL请求:万向节API身份验证失败,401未经授权(PHP cURL请求),php,api,authentication,curl,gimbal,Php,Api,Authentication,Curl,Gimbal,我正在尝试连接万向节管理器Restful API。我有我的组织的帐户和API密钥。我的cURL请求不断失败,API端点发出401个未经授权的响应。以下是我在PHP中的cURL请求: // from Gimbal Manager: define('ORG_API_KEY', 'XXXXXXXXXXXXXXXXX') ; // new beacon registration object: $post = array ( "factory_id" =
// from Gimbal Manager:
define('ORG_API_KEY', 'XXXXXXXXXXXXXXXXX') ;
// new beacon registration object:
$post = array (
"factory_id" => "XXXX-XXXXX",
"name" => "NewBeacon",
"latitude" => 12345
"longitude" => 67890,
"visibility" => "public"
);
$url = "https://manager.gimbal.com/api/beacons";
$headers = array(
'AUTHORIZATION: Token token=' . ORG_API_KEY,
'Content-type: application/json'
) ;
$debug = 1 ;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers, TRUE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
if ($debug) {
curl_setopt($ch, CURLOPT_VERBOSE, TRUE);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($curl, CURLINFO_HEADER_OUT, true);
}
curl_setopt($crl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($crl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$result = curl_exec($ch);
编辑并在此处输入上述$headerSent变量中的请求标头
POST /api/beacons HTTP/1.1
Host: manager.gimbal.com
Accept: */*
Content-Length: 577
Expect: 100-continue
Content-Type: multipart/form-data; boundary=----------------------------ce1a4e9dd55e
下面是万向节的回应:
HTTP/1.1 401 Unauthorized
Cache-Control: no-cache
Content-Type: text/html; charset=utf-8
Date: Sat, 29 Aug 2015 20:05:10 GMT
Server: Apache
Status: 401 Unauthorized
Vary: Accept-Encoding
WWW-Authenticate: Token realm="Application"
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-Request-Id: 7abe53cd-d161-4886-bb61-8cfedf71743a
X-XSS-Protection: 1; mode=block
Content-Length: 27
Connection: keep-alive
HTTP Token: Access denied.
我尝试了几种表达AUTH标记的不同方式:
AUTHORIZATION: <$token>
AUTHORIZATION: Token <$token>
AUTHORIZATION: Token token=<$token>
他们都给出了相同的回答。我注意到这里和其他地方的其他罚单描述了类似的问题,但没有一张被标记为已解决
有没有人有幸连接到万向节管理器API?如果是这样的话,您的代码看起来有什么不同吗?最后,我在上面的初始代码中遇到了两个问题 CURLOPT_HTTPHEADER上的TRUE标志阻止发送AUTH/Content-type头。我不确定为什么会在其中,也不确定该标志是否有任何值或意义 我发送的POST数据格式不正确。因为我请求的是JSON的内容类型,所以它希望POST数据采用这种格式。一旦我添加了json_encode$post,一切都很好
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers, TRUE);
.. .became ....
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
and
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
... became ....
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post));
有时,需要仔细地键入并格式化一个大的StackOverflow问题,才能看到代码中的缺陷并自己解决它 刚刚发现CURLOPT_HTTPHEADER中的TRUE标志阻止了头变量的传递,从而导致了身份验证问题。现在我得到的状态是:我的回复中有400个错误的请求。当我得到解决,我会张贴结果