我有几台 Antminer L3+,运行基于 unix 的操作系统 + cgminer 软件。它有一个受密码保护的 Web 界面,http://10.12.1.1/cgi-bin/reboot.cgi
我可以像这样直接从浏览器访问它来重新启动设备。http://root:[email protected]/cgi-bin/reboot.cgi
但是当我从终端运行相同程序时,出现了 401 错误。curl http://root:[email protected]/cgi-bin/reboot.cgi
我还尝试在 PHP 中使用带有参数的 curl 来模拟浏览器,但仍然出现 401 错误。
知道为什么会发生这种情况吗?
答案1
您可能发送了错误的授权。请尝试--digest
,如果不行,请尝试--anyauth
并用它--verbose
来找出哪一个有效,然后找到正确的身份验证开关手册并且只使用那一个(为了安全)。
您可能想要尝试的另一件事是启用 cookie。一些路由器在 401 上设置 cookie,并期望在下一个请求中返回该 cookie。您可以使用以下方式读取和写入 cookie--cookie cookies.txt --cookie-jar cookies.txt
。如果您不关心保存 cookie(例如,您正在重新启动路由器)并且不需要解析输出,那么--cookie-jar -
启用 cookie 引擎并将它们写入标准输出就足够了。
答案2
感谢 Jay。这是执行 LAN cgi-bin url 的工作参数,例如从终端或通过 PHP 脚本(而不是浏览器)。这可以从 LAN 或 WAN 执行(通过防火墙/路由器上预先配置的端口)。http://root:[email protected]/cgi-bin/reboot.cgi
从 WAN:
curl --digest --user 'username:password' http://YOUR_WAN_IP:PORT/cgi-bin/reboot.cgi
从局域网
curl --digest --user 'username:password' http://YOUR_LAN_IP/cgi-bin/reboot.cgi
通过 PHP 脚本:
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPGET, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_USERPWD, "username:password");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
curl_setopt($ch, CURLOPT_URL, 'http://YOUR_WAN_IP:PORT/cgi-bin/reboot.cgi');
$output = curl_exec($ch);
$info = curl_getinfo($ch)
curl_close($ch);
print_r($output);
print_r($info);