curl 抓取网页(常用PHP做网页抓取、模拟请求业务的朋友应该都知道)

优采云 发布时间: 2021-10-04 02:30

  curl 抓取网页(常用PHP做网页抓取、模拟请求业务的朋友应该都知道)

  使用PHP进行网页爬取和模拟请求服务的朋友应该都知道Curl是神器。

  curl是一个非常强大的开源库,支持http、https、telnet、ftp等多种网络协议。在PHP中,我们可以通过curl的一系列功能轻松处理会话请求。

  虽然常用,但还是要百度好几次才能正常使用……今天对curl做一个总结,供以后使用,也把总结分享给大家。

  使用CURL发送会话请求的基本流程

  CURL 是典型的“活得好不粘”的工具。它虽然功能强大,但它的使用却非常简单和成熟。

  使用 CURL 发送会话请求一般有以下几个步骤:

  初始化连接句柄

  配置 CURL 选项

  执行请求并返回结果

  释放连接句柄

  简单点:建立连接 -> 制定规则 -> 请求数据 -> 断开连接

  简单,直接,从不拖延!

  使用CURL模拟数据请求的GET方法

  在get模式下进行数据请求的方式有很多种。

  对于简单的调用链接和返回数据,其实可以理解为读取一个html文件。

  可以使用file_get_contents() 和fopen() 等函数轻松解决。

  但是对于需要控制COOKIE内容、头部信息等的get请求,就需要牺牲curl来解决!

  function curl_get_https($url){

    $curl = curl_init(); // 建立连接句柄,启动一个CURL会话

    curl_setopt($curl, CURLOPT_URL, $url);

    curl_setopt($curl, CURLOPT_HEADER, 0);

    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查

    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);  // 从证书中检查SSL加密算法是否存在

    $tmpInfo = curl_exec($curl);     // 执行请求并返回结果

    

    curl_close($curl);   // 释放连接句柄,关闭URL请求

    return $tmpInfo;    // return返回结果

}

  使用 CURL 模拟 POST 进行数据请求

  通用,获取更多数据的接口,一般使用post作为请求参数的传输方式

  /* PHP CURL HTTPS POST */

function curl_post_https($url,$data){ 

    // 模拟提交数据函数

    $curl = curl_init(); // 建立连接句柄,启动一个CURL会话

    curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址

    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对*敏*感*词*来源的检查

    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在

    curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器

    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转

    curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer

    curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求

    curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的数据包

    curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环

    curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容

    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回

    $tmpInfo = curl_exec($curl); // 执行操作

    if (curl_errno($curl)) {

        echo 'Errno'.curl_error($curl);//捕抓异常

    }

    curl_close($curl); // 释放连接句柄,关闭CURL会话

    return $tmpInfo; // return返回结果

}

  使用PHP开源库curl的curl_setopt方法,配合各种配置参数,可以轻松模拟各种请求。

  使用 CURL 处理上传和下载服务

  留个坑待补

  使用 CURL 抓取远程链接图片

  留个坑待补

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线