【发布时间】:2018-04-16 08:41:55
【问题描述】:
我正在尝试为我的 wifi pineapple nano 编写自定义 Web 界面。我不是一个经验丰富的编码员或任何东西,但我知道并有点了解 php,并决定使用 php curl 与菠萝上的 REST API 中的构建进行对话。
我写了以下代码:
?php
print "your code started</br>";
$key="7de64925dd8703fc5595a7d0b845ce0ed965fa799b67a19b310cb2538017aeaacb205e6dbc72d8758c3b995d25a1a273783c49bfb7519b2e71fbd49af074ab35";
//define and encode json
/*$a = new \stdClass();
$a->module="Filters";
$a->action="addClient";
$a->mac="c0:ee:fb:4a:c1:57";
$a->apiToken=$key;
*/
$a=[
'system'=>'notifications',
'action'=>'addNotification',
'message'=>'Hello from apache!',
'apiToken'=>'7de64925dd8703fc5595a7d0b845ce0ed965fa799b67a19b310cb2538017aeaacb205e6dbc72d8758c3b995d25a1a273783c49bfb7519b2e71fbd49af074ab35'
];
$JSON = json_encode($a);
print $JSON;
//curl post request
$c = curl_init();
curl_setopt($c, CURLOPT_CUSTOMREQUEST, "POST");
//curl_setopt($c, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt($c, CURLOPT_URL, "172.16.42.1/api");
curl_setopt($c, CURLOPT_POST, true);
curl_setopt($c, CURLOPT_POSTFIELDS, $JSON);
curl_setopt($c, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Authorization: ' . $key
));
//print curl output
$result = curl_exec($c);
print $result;
$info = curl_getinfo($c);
print '</br>';
print $info['http_code'];
if(!curl_exec($c)){
die('Error: "' . curl_error($c) . '" - Code: ' . curl_errno($c));
}
//close curl request
curl_close($c);
//debug
print "</br>Your code ran";
在执行时,我得到以下输出:
您的代码已启动 {"system":"notifications","action":"addNotification","message":"你好 从 阿帕奇!","apiToken":"7de64925dd8703fc5595a7d0b845ce0ed965fa799b67a19b310cb2538017aeaacb205e6dbc72d8758c3b995d25a1a273783c49bfb7519b2e71fbd49af074ab3 200错误:“” - 代码:0
但是,在菠萝上什么都没有发生。当我通过wireshark查看数据时,我得到了很多'301永久移动'包。
任何人都知道这个问题的答案,或者可能是一种更好的方式来做我想做的事情?
提前致谢!
仅供参考:curl 请求在 CLI 和 postman 中都有效,使用这些方法似乎没有任何问题。
【问题讨论】:
-
您缺少 $a 的结束 ']'
-
感谢 CURLOPT_RETURNTRANSFER,您不能使用
!检查 curl_exec 是否失败。 curl_exec return bool(false) 如果有错误,但响应为空,但没有发生错误,它返回一个空字符串,即!也强制转换为 bool(false),您必须通过执行if(false===curl_exec($c)){检查 curl_exec 是否失败,另外,不要丢弃 curl_exec 的输出,var_dump 它。if(false===($response=curl_exec($c))){和var_dump($response); -
可能问题是 --- 172.16.42.1 ping 统计 --- 发送了 16 个数据包,收到了 0 个数据包,丢包率 100%,时间 14999ms
-
@buildok,这个IP是连接wifi菠萝的本地IP。连接有效,通过 CLI 或邮递员完成的 curl 请求也是如此,相信我:我确定了不止几次!
-
@inneedofhelp 谢谢,这是复制粘贴错误。编辑了它