Inhaltsverzeichnis
Antwortinhalt:
Heim Backend-Entwicklung PHP-Tutorial Web-Crawling – PHP verwendet Curl zum Crawlen von Webseiten

Web-Crawling – PHP verwendet Curl zum Crawlen von Webseiten

Sep 23, 2016 am 11:31 AM
curl php 网页抓取

<code>封装了一个curl抓取网页的函数,在本地测没问题;放到测试服务器上后,如果通过浏览器访问
执行,大部分时候函数返回的HTTP状态码返回0,错误信息`Error:name lookup timed 
out`,极其偶像的情况下返回200成功;但如果直接在测试服务器上直接用命令行执行,100%成功。

代码如下:</code>
Nach dem Login kopieren
Nach dem Login kopieren
<code>static public function curlGet($url, $data = array(), $header = array(), $timeout = 3, $port = 80)
    {
        $is_ssl  = substr($url, 0, 5) == 'https' ? 1 : 0;

        $ch = curl_init();
        if (!empty($data)) {
            $data = is_array($data)?http_build_query($data): $data;
            $url .= (strpos($url,'?')?  '&amp;': "?") . $data;
        }

        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1); //是否抓取跳转后的页面
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
        curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
        curl_setopt($ch, CURLOPT_POST, 0);
        //curl_setopt($ch, CURLOPT_PORT, $port);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
        curl_setopt($ch, CURLOPT_REFERER, $url);
        // curl_setopt($ch, CURLOPT_USERAGENT, self::url2useragent($url));
        
        if($is_ssl){
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true);  // 从证书中检查SSL加密算法是否存在
        }
        $result = array();
        $result['result'] = curl_exec($ch);
        $result['http_code'] = curl_getinfo($ch,CURLINFO_HTTP_CODE);
        if (0 != curl_errno($ch)) {
            $result['error']  = "Error:\n" . curl_error($ch);
        }
        curl_close($ch);
        return $result;
    }</code>
Nach dem Login kopieren
Nach dem Login kopieren
<code>我个人感觉和代码应该关系不大,不知是哪的问题。望各路大神不吝赐教,指点迷津,不胜
感激。</code>
Nach dem Login kopieren
Nach dem Login kopieren

Antwortinhalt:

<code>封装了一个curl抓取网页的函数,在本地测没问题;放到测试服务器上后,如果通过浏览器访问
执行,大部分时候函数返回的HTTP状态码返回0,错误信息`Error:name lookup timed 
out`,极其偶像的情况下返回200成功;但如果直接在测试服务器上直接用命令行执行,100%成功。

代码如下:</code>
Nach dem Login kopieren
Nach dem Login kopieren
<code>static public function curlGet($url, $data = array(), $header = array(), $timeout = 3, $port = 80)
    {
        $is_ssl  = substr($url, 0, 5) == 'https' ? 1 : 0;

        $ch = curl_init();
        if (!empty($data)) {
            $data = is_array($data)?http_build_query($data): $data;
            $url .= (strpos($url,'?')?  '&amp;': "?") . $data;
        }

        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1); //是否抓取跳转后的页面
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
        curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
        curl_setopt($ch, CURLOPT_POST, 0);
        //curl_setopt($ch, CURLOPT_PORT, $port);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
        curl_setopt($ch, CURLOPT_REFERER, $url);
        // curl_setopt($ch, CURLOPT_USERAGENT, self::url2useragent($url));
        
        if($is_ssl){
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true);  // 从证书中检查SSL加密算法是否存在
        }
        $result = array();
        $result['result'] = curl_exec($ch);
        $result['http_code'] = curl_getinfo($ch,CURLINFO_HTTP_CODE);
        if (0 != curl_errno($ch)) {
            $result['error']  = "Error:\n" . curl_error($ch);
        }
        curl_close($ch);
        return $result;
    }</code>
Nach dem Login kopieren
Nach dem Login kopieren
<code>我个人感觉和代码应该关系不大,不知是哪的问题。望各路大神不吝赐教,指点迷津,不胜
感激。</code>
Nach dem Login kopieren
Nach dem Login kopieren

1. Stellen Sie eine größere Zeitüberschreitung ein;
2. Starten Sie den Server neu.

Ihr Server hat einen Anfall

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian

CakePHP Datum und Uhrzeit CakePHP Datum und Uhrzeit Sep 10, 2024 pm 05:27 PM

CakePHP Datum und Uhrzeit

CakePHP-Datei hochladen CakePHP-Datei hochladen Sep 10, 2024 pm 05:27 PM

CakePHP-Datei hochladen

CakePHP-Routing CakePHP-Routing Sep 10, 2024 pm 05:25 PM

CakePHP-Routing

CakePHP-Projektkonfiguration CakePHP-Projektkonfiguration Sep 10, 2024 pm 05:25 PM

CakePHP-Projektkonfiguration

Besprechen Sie CakePHP Besprechen Sie CakePHP Sep 10, 2024 pm 05:28 PM

Besprechen Sie CakePHP

CakePHP-Kurzanleitung CakePHP-Kurzanleitung Sep 10, 2024 pm 05:27 PM

CakePHP-Kurzanleitung

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein

See all articles