Maison  >  Article  >  développement back-end  >  Explication détaillée de CURL pour le robot d'exploration Web PHP

Explication détaillée de CURL pour le robot d'exploration Web PHP

小云云
小云云original
2018-03-14 14:52:137430parcourir


Le curl de PHP peut simuler diverses requêtes HTTP. C'est également la base sur laquelle PHP réalise des robots d'exploration Web et est également principalement utilisé pour appeler des API d'interface. À ce moment-là, quelqu'un demandera : Pourquoi n'utilisez-vous pas file_get_contents ?

les performances de curl sont meilleures qu'elles et il peut effectuer des opérations plus complexes, pas seulement obtenir des données de page.

Ce qui suit présente quelques fonctions couramment utilisées.

  • curl_init Initialiser une conversation curl

  • curl_setopt Définir les paramètres curl, c'est-à-dire les options de transmission

  • curl_exec Exécuter la requête

  • curl_close Fermer une conversation curl

Principalement les quatre ci-dessus

curl_errno renvoie le dernier code d'erreur. PHP a défini de nombreux codes d'énumération d'erreurs

  • curl_errror renvoie une chaîne qui protège la dernière erreur de la session en cours

Passons directement à l'exemple ci-dessous, les explications pertinentes sont dans les commentaires

1 Téléchargez une page web sur Internet et remplacez "Baidu" dans le contenu par "Diansi" puis affichez

<?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. Recherchez la météo actuelle à Pékin en appelant WebService

<?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 Simulez l'URL qui nécessite une connexion et capturez le contenu de la page Web

<?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. Capturez les informations du site de connexion et téléchargez la page de l'espace personnel + personnalisez le capture de saut de lien de page

<?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; 
    } 
} 
?>

Télécharger un fichier du serveur FTP vers le serveur local

<?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教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn