2009-09-11 322 views
0

我正在为客户做一些自动化操作,并计划在此过程中通过cURL运行一些PHP脚本。但是,在浏览器中正常工作的URL在被cURL命中时会出现404。我在其他地方看到,有些服务器被配置为以这种方式阻止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会有所帮助,但响应中没有任何更改。

有关如何追踪此问题或更好的根本原因但解决它的任何想法?

+1

转储firefox输出的全套头文件。转储当前由curl输出的全套标题。继续调整你的卷曲设置,直到它们匹配。 如果您的标题是相同的(包括Cookie),并且您以现实的速度请求页面,则没有真正的方法来区分curl和真实浏览器。 ...那么,一个真正的浏览器请求图像和脚本 - 不只是HTML :) – 2009-09-11 23:31:36

回答

1

事实证明,The Planet的友善人士在此帐户中存在一些内部路由问题。/etc/sysconfig/network中的主机名设置不正确以及/etc/resolv.conf中的错误解析程序等等。这个和其他一些网站最近从一台服务器迁移到另一台。尚未修复,但这就是为什么404.

谢谢。