【发布时间】:2011-09-27 09:49:58
【问题描述】:
我正在为客户做一些自动化操作,并计划在此过程中通过 cURL 运行一些 php 脚本。但是,在浏览器中运行良好的 URL 在被 cURL 命中时会出现 404。我在其他地方看到过一些服务器被配置为以这种方式阻止 cURL。
这是我可以在httpd.conf 中编辑的设置吗?似乎不在php.ini。
我的代码是这样的:
$url = "http://site.com/xxx/curl.php?cID=$c->cID&db=$c->db&un=$c->un&/";
echo "$url";
// spoofing FireFox 2.0
$useragent="Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1)
Gecko/20061204 Firefox/2.0.0.1";
$ch = curl_init ($url) ;
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1) ;
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
$res = curl_exec ($ch);
当我回显$res 时,我从默认的 404 错误页面获取代码。如果我复制回显的 $url 并粘贴到浏览器中,我会得到很好的页面。还尝试使用相对路径和完整的服务器路径。
今天添加了用户代理欺骗,以尝试查看说我不是 cURL 是否会有所帮助,但响应中没有任何变化。
关于如何追查此问题的根本原因或更好地解决它的任何想法?
【问题讨论】:
-
转储由 firefox 输出的全套标头。转储 curl 当前输出的全部标头。不断调整你的卷曲设置,直到它们匹配。如果您的标头相同(包括 cookie),并且您以实际的速度请求页面,则没有真正的方法可以区分 curl 和真实浏览器之间的区别。 ...嗯,一个真正的浏览器请求图像和脚本——不仅仅是 HTML :)
标签: php curl http-status-code-404