【发布时间】:2015-10-28 11:21:30
【问题描述】:
我正在使用这个 Phalcon PHP API HMAC 框架,我有一个小问题。
我在 routes.php 中声明了一个 GET 路由,并试图从 client-connect.php 发出请求(一个用于发出请求的简单 CURL 脚本)。
这就是客户端的样子:
$privateKey = '593fe6ed77014f9502761028801aa376f141916bd26b1b3f0271b5ec3135b989';
$time = time();
$id = 1;
$data = [
'name' => 'bob',
];
$message = buildMessage($time, $id, $data);
$hash = hash_hmac('sha256', $message, $privateKey);
$headers = ['API_ID: ' . $id, 'API_TIME: ' . $time, 'API_HASH: ' . $hash];
$ch = curl_init();
curl_setopt($ch, CURLOPT_VERBOSE, TRUE);
curl_setopt($ch, CURLOPT_URL, $host);
// curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($ch, CURLOPT_POST, FALSE);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLINFO_HEADER_OUT, TRUE);
当我发出 post 请求时,一切正常,但是当我尝试发出 GET、PUT 或 DELETE 请求时(我只是取消注释客户端中注释的行),它返回一个错误:
Request:
DELETE /nodes/mikrotik HTTP/1.1
Host: vpn.wibee.com
Accept: */*
API_ID: 1
API_TIME: 1446031137
API_HASH: 4d0852239859da5e90270b3f7dfd2167f6e5153ca83a9c5896ee262e41b19674
Content-Length: 508
Expect: 100-continue
Content-Type: multipart/form-data; boundary=------------------------e71b5fd144802749
Response:
HTTP/1.1 100 Continue
HTTP/1.1 401 Unauthorized
Server: nginx/1.6.2
Date: Wed, 28 Oct 2015 11:18:58 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Access denied
我认为我可能遗漏了一些东西(与身份验证相关的东西)。有什么解决办法吗?
谢谢!
【问题讨论】:
-
您是否使用 delete/put/get 方法声明了到控制器的路由?
-
@yergo 是的,实际上我解决了 PUT、DELETE 请求。我只是在 GET 请求方面遇到了问题。
-
我会调查this line。也许你正在重置 $this->_maxRequestDelay 给你太少的时间来使用 API
-
@yergo 不工作...我只是遇到了 GET 请求的问题。 POST、PUT、DELETE……一切正常。似乎客户端链接](github.com/jeteokeeffe/php-hmac-rest-api/blob/master/…) 发送所有其他请求,但不发送 GET。主要开发人员说它对他有用,并且代码看起来很稳定而且没有错误。那里有什么问题? : ´ (
-
原始客户端发送包括GET在内的所有请求。当您将客户端实现与 POST 以外的其他方法一起使用时,我会责怪 curlopt 设置中有太多或不正确的选项