Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erklärung von CURL für den PHP-Webcrawler

Detaillierte Erklärung von CURL für den PHP-Webcrawler

小云云
小云云Original
2018-03-14 14:52:137446Durchsuche


PHPs Curl kann verschiedene HTTP-Anfragen simulieren. Dies ist auch die Grundlage für PHP, um Webcrawler auszuführen, und wird auch hauptsächlich zum Aufrufen von Schnittstellen-APIs verwendet. Zu diesem Zeitpunkt wird jemand fragen: Warum verwenden Sie nicht file_get_contents?

Die Leistung von Curl ist besser und es kann komplexere Vorgänge ausführen und nicht nur Seitendaten abrufen.

Im Folgenden werden einige häufig verwendete Funktionen vorgestellt.

  • curl_initEine Curl-Konversation initialisieren

  • curl_setoptCurl-Parameter festlegen, d. h. Übertragungsoptionen

  • curl_execAnforderung ausführen

  • curl_closeEine Curl-Konversation schließen

Hauptsächlich die oben genannten vier

curl_errno gibt den letzten Fehlercode zurück. PHP hat viele Fehleraufzählungscodes definiert

  • curl_errror gibt eine Zeichenfolge zurück, die den neuesten Fehler in der aktuellen Sitzung schützt

Gehen wir direkt zum Beispiel unten, die entsprechenden Erklärungen finden Sie in den Kommentaren

1. Laden Sie eine Webseite im Internet herunter und ersetzen Sie „Baidu“ im Inhalt durch „Diansi“ und geben Sie sie dann aus

<?php/**
 * 实例描述:在网络上下载一个网页并把内容中的“百度”替换为“屌丝”之后输出
 */$curlobj = curl_init();            // 初始化curl_setopt($curlobj, CURLOPT_URL, "http://www.baidu.com");        // 设置访问网页的URLcurl_setopt($curlobj, CURLOPT_RETURNTRANSFER, true);           // 执行之后不直接打印出来$output=curl_exec($curlobj);  // 执行curl_close($curlobj);          // 关闭cURLecho str_replace("百度","屌丝",$output);?>

2. Fragen Sie das aktuelle Wetter in Peking ab, indem Sie WebService anrufen

<?php/**
 * 实例描述:通过调用WebService查询北京的当前天气
 */$data = &#39;theCityName=北京&#39;;$curlobj = curl_init();    
curl_setopt($curlobj, CURLOPT_URL, "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName");  
curl_setopt($curlobj, CURLOPT_HEADER, 0); 
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1);  
curl_setopt($curlobj, CURLOPT_POST, 1);  
curl_setopt($curlobj, CURLOPT_POSTFIELDS, $data);  
curl_setopt($curlobj, CURLOPT_HTTPHEADER, array("application/x-www-form-urlencoded; charset=utf-8", 
    "Content-length: ".strlen($data)
    )); 
$rtn = curl_exec($curlobj);   
if(!curl_errno($curlobj)){    // $info = curl_getinfo($curlobj); 
    // print_r($info);
    echo $rtn;  
} else {  echo &#39;Curl error: &#39; . curl_error($curlobj);
}
curl_close($curlobj);?>

3. Simulieren Sie die URL, die eine Anmeldung erfordert, und erfassen Sie den Inhalt der Webseite

<?php/**
 * 实例描述:模拟需要登录的网址并抓取网页的内容
 */$data=array(&#39;username&#39; => &#39;promonkey&#39;, 
    &#39;password&#39; => &#39;1q2w3e&#39;,    &#39;remember&#39;=>1);$data=&#39;username=zjzhoufy@126.com&password=1q2w3e&remember=1&#39;;$curlobj = curl_init();            // 初始化curl_setopt($curlobj, CURLOPT_URL, "http://www.imooc.com/user/login");     // 设置访问网页的URLcurl_setopt($curlobj, CURLOPT_RETURNTRANSFER, true);           // 执行之后不直接打印出来// Cookie相关设置,这部分设置需要在所有会话开始之前设置date_default_timezone_set(&#39;PRC&#39;); // 使用Cookie时,必须先设置时区curl_setopt($curlobj, CURLOPT_COOKIESESSION, TRUE); 
curl_setopt($curlobj, CURLOPT_HEADER, 0); 
curl_setopt($curlobj, CURLOPT_FOLLOWLOCATION, 1); // 这样能够让cURL支持页面链接跳转curl_setopt($curlobj, CURLOPT_POST, 1);  
curl_setopt($curlobj, CURLOPT_POSTFIELDS, $data);  
curl_setopt($curlobj, CURLOPT_HTTPHEADER, array("application/x-www-form-urlencoded; charset=utf-8", 
    "Content-length: ".strlen($data)
    )); 
curl_exec($curlobj);   // 执行curl_setopt($curlobj, CURLOPT_URL, "http://www.imooc.com/space/index");
curl_setopt($curlobj, CURLOPT_POST, 0);  
curl_setopt($curlobj, CURLOPT_HTTPHEADER, array("Content-type: text/xml"
    )); 
$output=curl_exec($curlobj);  // 执行curl_close($curlobj);          // 关闭cURLecho $output;?>

4. Erfassen Sie die Informationen der Anmeldewebsite und laden Sie die persönliche Bereichsseite herunter + passen Sie sie an Seite Link Jump Capture

<?php/**
 * 实例描述:登录网站的信息抓取并下载个人空间页面
 * 自定义实现页面链接跳转抓取
 * 
 */$data=&#39;username=demo_peter@126.com&password=123qwe&remember=1&#39;;$curlobj = curl_init();            // 初始化curl_setopt($curlobj, CURLOPT_URL, "http://www.imooc.com/user/login");     // 设置访问网页的URLcurl_setopt($curlobj, CURLOPT_RETURNTRANSFER, true);           // 执行之后不直接打印出来// Cookie相关设置,这部分设置需要在所有会话开始之前设置date_default_timezone_set(&#39;PRC&#39;); // 使用Cookie时,必须先设置时区curl_setopt($curlobj, CURLOPT_COOKIESESSION, TRUE); 
curl_setopt($curlobj, CURLOPT_HEADER, 0); 
// 注释掉这行,因为这个设置必须关闭安全模式 以及关闭open_basedir,对服务器安全不利//curl_setopt($curlobj, CURLOPT_FOLLOWLOCATION, 1);  curl_setopt($curlobj, CURLOPT_POST, 1);  
curl_setopt($curlobj, CURLOPT_POSTFIELDS, $data);  
curl_setopt($curlobj, CURLOPT_HTTPHEADER, array("application/x-www-form-urlencoded; charset=utf-8", 
    "Content-length: ".strlen($data)
    )); 
curl_exec($curlobj);   // 执行curl_setopt($curlobj, CURLOPT_URL, "http://www.imooc.com/space/index");
curl_setopt($curlobj, CURLOPT_POST, 0);  
curl_setopt($curlobj, CURLOPT_HTTPHEADER, array("Content-type: text/xml"
    )); 
$output=curl_redir_exec($curlobj);  // 执行curl_close($curlobj);          // 关闭cURLecho $output;/**
 * 自定义实现页面链接跳转抓取
 */function curl_redir_exec($ch,$debug="") { 
    static $curl_loops = 0; 
    static $curl_max_loops = 20; 

    if ($curl_loops++ >= $curl_max_loops) 
    { 
        $curl_loops = 0; 
        return FALSE; 
    } 
    curl_setopt($ch, CURLOPT_HEADER, true); // 开启header才能够抓取到重定向到的新URL
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    $data = curl_exec($ch); 
    // 分割返回的内容
    $h_len = curl_getinfo($ch, CURLINFO_HEADER_SIZE); 
    $header = substr($data,0,$h_len);    $data = substr($data,$h_len - 1);    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
    if ($http_code == 301 || $http_code == 302) { 
        $matches = array(); 
        preg_match(&#39;/Location:(.*?)\n/&#39;, $header, $matches); 
        $url = @parse_url(trim(array_pop($matches))); 
        // print_r($url); 
        if (!$url) 
        { 
            //couldn&#39;t process the url to redirect to 
            $curl_loops = 0; 
            return $data; 
        } 
        $last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL)); 
        if (!isset($url[&#39;scheme&#39;])) 
            $url[&#39;scheme&#39;] = $last_url[&#39;scheme&#39;]; 
        if (!isset($url[&#39;host&#39;])) 
            $url[&#39;host&#39;] = $last_url[&#39;host&#39;]; 
        if (!isset($url[&#39;path&#39;])) 
            $url[&#39;path&#39;] = $last_url[&#39;path&#39;];        $new_url = $url[&#39;scheme&#39;] . &#39;://&#39; . $url[&#39;host&#39;] . $url[&#39;path&#39;] . (isset($url[&#39;query&#39;])?&#39;?&#39;.$url[&#39;query&#39;]:&#39;&#39;); 
        curl_setopt($ch, CURLOPT_URL, $new_url); 

        return curl_redir_exec($ch); 
    } else { 
        $curl_loops=0; 
        return $data; 
    } 
} 
?>

Laden Sie eine Datei vom FTP-Server auf den lokalen Server herunter

<?php/**
 * 实例描述:把本地文件上传到FTP服务器上
 */$curlobj = curl_init();    
$localfile = &#39;ftp01.php&#39;;$fp = fopen($localfile, &#39;r&#39;);

curl_setopt($curlobj, CURLOPT_URL, "ftp://192.168.1.100/ftp01_uploaded.php");  
curl_setopt($curlobj, CURLOPT_HEADER, 0); 
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1);  
curl_setopt($curlobj, CURLOPT_TIMEOUT, 300); // times out after 300scurl_setopt($curlobj, CURLOPT_USERPWD, "peter.zhou:123456");//FTP用户名:密码//上传和下载主要是下面子三个参数不一样curl_setopt($curlobj, CURLOPT_UPLOAD, 1);
curl_setopt($curlobj, CURLOPT_INFILE, $fp);
curl_setopt($curlobj, CURLOPT_INFILESIZE, filesize($localfile));$rtn = curl_exec($curlobj);  
fclose($fp); 
if(!curl_errno($curlobj)){    echo "Uploaded successfully.";  
} else {  echo &#39;Curl error: &#39; . curl_error($curlobj);
}
curl_close($curlobj);?>

6.下载网络上面的一个HTTPS的资源

<?php/**
 * 实例描述:下载网络上面的一个HTTPS的资源
 */$curlobj = curl_init();           
  // 初始化curl_setopt($curlobj, CURLOPT_URL, "https://ajax.aspnetcdn.com/ajax/jquery.validate/1.12.0/jquery.validate.js");      
   // 设置访问网页的URLcurl_setopt($curlobj, CURLOPT_RETURNTRANSFER, true);           
   // 执行之后不直接打印出来// 设置HTTPS支持date_default_timezone_set(&#39;PRC&#39;); 
   // 使用Cookie时,必须先设置时区curl_setopt($curlobj, CURLOPT_SSL_VERIFYPEER, 0); 
   // 对认证证书来源的检查从证书中检查SSL加密算法是否存在curl_setopt($curlobj, CURLOPT_SSL_VERIFYHOST, 2); 
   // $output=curl_exec($curlobj);  // 执行curl_close($curlobj);          
   // 关闭cURLecho $output;?>

相关推荐:

php之curl学习_PHP教程

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung von CURL für den PHP-Webcrawler. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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