curl给出403错误?

时间:2010-09-17 12:45:42

标签: php curl phpbb mediawiki-extensions

我正在尝试从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中运行脚本?

4 个答案:

答案 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);