【问题标题】:curl not working for getting a web page content, why?curl 无法获取网页内容,为什么?
【发布时间】:2010-10-23 06:49:28
【问题描述】:

我正在使用 curl 脚本转到链接并获取其内容以进行进一步操作。以下是链接和 curl 脚本:

<?php 
$url = 'http://criminaljustice.state.ny.us/cgi/internet/nsor/fortecgi?serviceName=WebNSOR&amp;templateName=detail.htm&amp;requestingHandler=WebNSORDetailHandler&amp;ID=368343543';

//curl script to get content of given url

$ch = curl_init();

// set the target url

curl_setopt($ch, CURLOPT_URL,$url);

// request as if Firefox

curl_setopt($ch, CURLOPT_HTTPHEADER, Array("User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.15) Gecko/20080623 Firefox/2.0.0.15") ); 
curl_setopt($ch, CURLOPT_NOBODY, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result= curl_exec ($ch);
curl_close ($ch);
echo $result;
?>

但是网站并没有通过脚本将其排除在外,它会在结果中给用户异常,但是如果我们通常将 url 粘贴到浏览器中,它会完美地打开页面。

请帮忙,我在这里做错了什么。

感谢和问候

【问题讨论】:

标签: php curl screen-scraping web-scraping


【解决方案1】:

用户代理是否应该在这样的数组中?我以前没见过这样的。

尝试只使用纯字符串,即

curl_setopt($ch, CURLOPT_HTTPHEADER, 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.15) Gecko/20080623 Firefox/2.0.0.15'); 

【讨论】:

  • 我将其更改为您的建议,我收到此错误:警告:curl_setopt() [function.curl-setopt]:您必须使用 CURLOPT_HTTPHEADER、CURLOPT_QUOTE、CURLOPT_HTTP200ALIASES 和第 9 行 C:\xampplite\htdocs\curl\extract.php 中的 CURLOPT_POSTQUOTE 参数
  • 嗨亚历克斯我知道我的脚本有什么问题,它的网址实际上有 &amo;而不是 & 符号,所以它本身是错误的 url。无论如何感谢您的帮助。
  • 啊,是的,抱歉,我忽略了 CURLOPT_ 标志。我通常将它与 CURLOPT_USERAGENT 一起使用。是的,您是否从 XHTML 文件中复制了链接?因为验证的页面必须将 & 符号编码为 &
【解决方案2】:

对于用户代理,我认为您想使用 CURLOPT_USERAGENT 常量

curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");

【讨论】:

    【解决方案3】:

    我运行了以下程序/脚本,页面已正确下载。这很可能意味着您运行脚本的服务器无法访问位于“criminaljustice.state.ny.us”的服务器。这可能是因为您的服务器配置错误,或者他们的服务器明确阻止了您,这是激进的屏幕抓取的常见结果。

    <?php
    $url = 'http://criminaljustice.state.ny.us/cgi/internet/nsor/fortecgi?serviceName=WebNSOR&templateName=detail.htm&requestingHandler=WebNSORDetailHandler&ID=368343543';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, Array("User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.15) Gecko/20080623 Firefox/2.0.0.15") ); 
    curl_setopt($ch, CURLOPT_NOBODY, false);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $result= curl_exec ($ch);
    curl_close ($ch);
    echo $result;
    

    其他故障排除提示 - 如果您对运行 PHP 脚本的机器具有 shell 访问权限,请运行以下命令

    curl -I 'http://criminaljustice.state.ny.us/cgi/internet/nsor/fortecgi?serviceName=WebNSOR&templateName=detail.htm&requestingHandler=WebNSORDetailHandler&ID=368343543'
    

    这将输出响应标头,其中可能包含有关您的请求失败原因的一些线索。

    【讨论】:

      【解决方案4】:

      我遇到了同样的问题,最终没有设置跟随位置选项。我认为 curl 默认会将其设置为 true,但我想不会!? 一旦我设置它就可以得到完整的网站没有问题

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-01
        • 1970-01-01
        • 2017-07-25
        相关资源
        最近更新 更多