我试图使用curl设置一个cron来定期重新启动我的WD N900路由器。
使用Chrome的开发者工具,当我通过它的WebGUI登录路由器时,它会把我带到“authentication.cgi”。下面是它的基本组件复制为一个curl(bash):
curl 'http://192.168.1.1/authentication.cgi' \
-H 'Cookie: QPYVIXOAZD=admin; uid=lseKLfq8zc' \
--data-raw 'USERNAME=admin&DIGEST=XXXXXXXXXXXXXXXXXXX'
关键组件是cookie条目,其中的uid对于该特定登录是唯一的。
为了重启路由器,我浏览了几页,最后找到了“service.cgi”。下面是它的基本组件,复制为curl(bash):
curl 'http://192.168.1.1/service.cgi' \
-H 'Cookie: QPYVIXOAZD=admin; uid=lseKLfq8zc' \
--data-raw 'EVENT=REBOOT'
要从service.cgi通过curl成功重新启动,cookie uid必须与authentication. cgi中的uid相同。否则,它不会重新启动,并显示“授权失败”。
如果不首先通过WebGUI登录获得cookie(这违背了curl的目的),我如何才能让它工作呢?
我尝试设置一个cookie jar(curl -c/tmp/cookie-jar.txt....)并删除“Cookie:...”行,这导致了另一个“Authorization failure”以及一个空的cookie文件保存:
# Netscape HTTP Cookie File
# https://curl.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
我还尝试了“curl - u myusername:mypassword”(带和不带--digest或--noauth选项),但都无济于事(“授权失败”)。
如有任何建议,我们将不胜感激。
1条答案
按热度按时间fiei3ece1#
当你说:
要从service.cgi通过curl成功重新启动,cookie uid必须与authentication.cgi中的uid相同。否则,它不会重新启动,并显示“授权失败”。
我将此解释为首先需要获取当前有效的cookie值。
在执行
authentication.cgi'
请求的地方,然后在后续的service.cgi
请求中使用uid
。我认为可能有问题的是cookie文件是空的。有可能在响应中没有返回cookie。但我发现curl cookie框有问题。所以我自己处理cookie。
对我来说,我使用PHP脚本来解决类似这样的问题。
我所要做的是运行一个cron作业来运行一个PHP脚本来实现这一点。
如果你不知道PHP,我会为你写它。
cron作业如下所示:
我真的希望这个curl命令对您有用,否则这个答案没有意义:
这将是我的第一步,这是reboot.php给定上述cron作业设置。这是基于我的基本curl故障排除过程。我已经在你的位置很多次。我开发了这个超过十年前。