0

我正在执行一个 cURL 请求,并且在大多数情况下它可以工作,但是对于某些站点它什么也没带回来,并且 cURL 没有错误。任何人都可以给我一些帮助吗?

这是我的小应用程序:http: //www.convurgency.com/tools/googlebot.php

去那里进入这个网站:http ://www.beemak.com

正如您所看到的,很多网站都可以工作,但选定的网站没有……有什么想法吗?

这是我的代码:

<?php
//Bot Curl Request  


$handle = curl_init();

curl_setopt_array($handle,array(
         CURLOPT_URL => $_GET['site'],
         CURLOPT_USERAGENT => 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)',
         CURLOPT_RETURNTRANSFER => true,
         CURLOPT_FOLLOWLOCATION => true
      ));

    $output = curl_exec($handle);

    $httpcode = curl_getinfo($handle, CURLINFO_TOTAL_TIME);
    $connecttime = curl_getinfo($handle, CURLINFO_CONNECT_TIME);
    $downloadtime = curl_getinfo($handle, CURLINFO_SPEED_DOWNLOAD);
    $downloadsize = curl_getinfo($handle, CURLINFO_SIZE_DOWNLOAD);

    if(curl_errno($handle)){
        echo '<img class="errorlogo" src="http://www.convurgency.com/images/logo103.png" />';
        echo '<p style="text-align:center;">There was an error finding your site, are you sure it exists?</p>';
        echo '<p style="text-align:center;"><a href="http://www.convurgency.com/tools/googlebot.php">Back to GoogleBot View</a></p>';
        echo 'Curl error: ' . curl_error($handle);

    } else {

        echo 'No Errors';

    };

    if (curl_error($handle)) {
     print "ERROR ". curl_error($handle) ."\n<br/>";
    }


     curl_close($handle);


     $output2 = preg_replace(
        array(
         // Remove invisible content
        '@<head[^>]*?>.*?</head>@siu',
        '@<style[^>]*?>.*?</style>@siu',
        '@<script[^>]*?.*?</script>@siu',
        '@<object[^>]*?.*?</object>@siu',
        '@<embed[^>]*?.*?</embed>@siu',
        '@<applet[^>]*?.*?</applet>@siu',
        '@<noframes[^>]*?.*?</noframes>@siu',
        '@<noscript[^>]*?.*?</noscript>@siu',
        '@<noembed[^>]*?.*?</noembed>@siu',
        // Add line breaks before and after blocks
        '@</?((address)|(blockquote)|(center)|(del))@iu',
        '@</?((div)|(h[1-9])|(ins)|(isindex)|(p)|(pre))@iu',
        '@</?((dir)|(dl)|(dt)|(dd)|(li)|(menu)|(ol)|(ul))@iu',
        '@</?((table)|(th)|(td)|(caption))@iu',
        '@</?((form)|(button)|(fieldset)|(legend)|(input))@iu',
        '@</?((label)|(select)|(optgroup)|(option)|(textarea))@iu',
        '@</?((frameset)|(frame)|(iframe))@iu',
        ),
                    array(' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', "\n\$0", "\n\$0", "\n\$0", "\n\$0", "\n\$0", "\n\$0", "\n\$0", "\n\$0", ), $output );

 echo preg_replace('/<(\w+) [^>]+>/', '<$1>', $output2);

 ?>
4

2 回答 2

0

查看 $connecttime 和 $downloadtime 并检查请求是否未超时。使用命令行 curl 或 wget 检查您是否可以从运行脚本的服务器访问该网站。

于 2012-09-14T18:02:38.280 回答
0

目标站点 URL 执行重定向可能存在问题。

默认情况下,当 curl 在发出请求后收到重定向时,它不会向新 URL 发出请求。例如,考虑 URL http://www.facebook.com。当您使用此 URL 发出请求时,服务器会向https://www.facebook.com/发送 HTTP 3XX 重定向。如果您尝试以下操作,您将得到一个空输出:

$ curl http://www.facebook.com
$

如果您希望 cURL 遵循这些重定向,您应该使用 -L 选项。

$ curl -L http://www.facebook.com/
<full content of raw html page here>
于 2020-05-22T21:33:15.713 回答