我正在尝试从MediaWiki登录页面为我的phpBB论坛设置一个cookie。登录wiki成功后使用钩子,我想运行一个设置cookie的php脚本。
该脚本在我独立运行或使用GET时运行,但出于安全考虑,我想POST到脚本。为此,我认为curl
将是最佳选择。
不幸的是,即使是这样的基本脚本:
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/ForumLogin.php");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
给我一个403 Forbidden错误。 robots.txt中没有应该干扰的规则。我还可以尝试使脚本工作,还是有其他方法可以在MediaWiki中运行脚本?
答案 0 :(得分:6)
对于我的特定项目,如果发生错误,服务器将抛出403错误,但仍会返回数据。所以为了解决这个问题,我做了这个:
curl_setopt($ch, CURLOPT_FAILONERROR, 0); // Fail on errors
如果禁用失败错误,您可能仍会获得一些数据。希望有所帮助。
答案 1 :(得分:5)
我怀疑这样做的理由是明确停止自动行为 - 反机器人或一般安全措施。您可能希望查看目标站点的源代码并检查任何此类度量 - 快速搜索“403”的代码可能会提供一些见解。甚至可能是POST请求在该上下文中不合法 - 因此出于安全原因而被阻止。
顺便说一句,我不确定你的意思是'出于安全考虑'。 POST不比GET更安全。他们都受到同样严格的审查。
答案 2 :(得分:2)
我的解决方案是设置用户代理选项,因此cURL可以伪装成浏览器。在php中设置的一个例子是
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6');
参考文献:
答案 3 :(得分:1)
像真正的尝试一样行动/请求" curl / 7.39.0"用户代理
<ion-content>
<ion-scroll></ion-scroll>
<ion-scroll></ion-scroll>
</ion-content>
或尝试浏览器阵列列表中的randam用户代理,如
$useragent= "curl/7.39.0";
curl_setopt($ch,CURLOPT_USERAGENT, $useragent);