我已经弄清楚如何使用 php curl 函数自动登录 2 个不同的 radio ,但在使用 netgear 路由器时遇到了问题。
问题是它的登录屏幕由一个弹出窗口组成,您可以在其中输入用户/密码,但我不知道如何使用 php curl 函数来处理它。
我尝试添加
curl_setopt($ch, CURLOPT_USERPWD, "用户名:密码");
正如对 this question post 的回答中所建议的那样,
但它只是返回了一个“无效登录”屏幕(之前,它会在此时挂起,所以我认为这是一个改进)。
我也尝试添加两者
curl_setopt($curl_conn, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
和
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
在它之前并打开和关闭CURLOPT_FOLLOWLOCATION但结果相同。
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $LoginPage);//IP Address followed by :8080
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($curl_conn, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_USERPWD, $Username . ":" . $Password);
$data = curl_exec($ch);
更新(2018/2/5):
下面给我路由器的部分设置页面!我可能不得不搞乱 html/javascript 才能得到剩下的...
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);//10 seconds
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);//kept trying options till it worked
curl_setopt($ch, CURLOPT_USERPWD, "$Username:$Password");
$result = curl_exec($ch);
//$resultStatus = curl_getinfo($ch);
//print 'ResultStatus:'.print_r($resultStatus) . "<br>";
curl_close($ch);
echo($result);
最佳答案
终于明白了!我需要的最后一件事是 curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY)
,我必须通过一次尝试一个设置来获得它(请参阅问题编辑中的完整答案)。感谢您提供所有有用的建议。
关于javascript - 使用 php curl 函数处理弹出登录窗口(netgear 路由器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41469697/