美文网首页编什么程
PHP网络爬虫之CURL

PHP网络爬虫之CURL

作者: 沙蒿同学 | 来源:发表于2019-04-03 09:12 被阅读43次

CURL简介

php的curl可以实现模拟http的各种请求,这也是php做网络爬虫的基础,也多用于接口api的调用。
PHP 支持 Daniel Stenberg 创建的 libcurl 库,能够连接通讯各种服务器、使用各种协议。libcurl 目前支持的协议有 http、https、ftp、gopher、telnet、dict、file、ldap。 libcurl 同时支持 HTTPS 证书、HTTP POST、HTTP PUT、 FTP 上传(也能通过 PHP 的 FTP 扩展完成)、HTTP 基于表单的上传、代理、cookies、用户名+密码的认证。

方法

  • 初始化

curl_init()

  • 设置属性

curl_setopt().有一长串CURL 参数可供设置,它们能指定URL请求的各个细节。

三个重要的选项

CURLOPT_URL :指定请求的URL;
CURLOPT_RETURNTRANSFER: 设置为1表示稍后执行的curl_exec函数的返回是URL的返回字符串,而不是把返回字符串定向到标准输出并返回TRUE;
CURLLOPT_HEADER:设置为0表示不返回HTTP头部信息

详细查看
php官网 https://www.php.net/manual/zh/function.curl-setopt.php

  • 执行并获取结果

curl_exec()

  • 释放句柄

curl_close()

  • curl_errno
    返回最后一次错误码,php已经定义了诸多错误枚举编码

  • curl_errror
    返回一个保护当前会话最近一次错误的字符串

  • curl_getinfo
    使用curl_getinfo()函数获取CURL请求输出的相关信息

url:网络地址。
content_type:内容编码。
http_code:HTTP状态码。
header_size:header的大小。
request_size:请求的大小。
filetime:文件创建的时间。
ssl_verify_result:SSL验证结果。
redirect_count:跳转计数。
total_time:总耗时。
namelookup_time:DNS查询耗时。
connect_time:等待连接耗时。
pretransfer_time:传输前准备耗时。
size_uplpad:上传数据的大小。
size_download:下载数据的大小。
speed_download:下载速度。
speed_upload:上传速度。
download_content_length:下载内容的长度。
upload_content_length:上传内容的长度。
starttransfer_time:开始传输的时间表。
redirect_time:重定向耗时。

例如

$info = curl_getinfo($sh);
echo ' 获取 '.$info['url'].'耗时'.$info['total_time'].'秒';

封装的请求

    /**
     * Created by 沙蒿.
     * @desc    curl请求封装
     * @param string $url   请求地址:https
     * @param string $type  请求方式:get/post
     * @param string $res   返回格式:json
     * @param array $arr   请求参数
     * @return mixed|string
     */
    public function httpsCurl($url = '', $type = 'get', $res = 'json', $arr = [])
    {
        $curl = curl_init();
        if ($type == 'post') {
            curl_setopt($curl, CURLOPT_URL, $url);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
            $postArr = urldecode(json_encode($arr));
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $postArr);
        } else {
            $getArr = '';
            foreach ($arr as $key => $value) {
                $getArr .= "$key=".urlencode($value)."&";
            }
            $url = substr($url.'?'.$getArr, 0, -1);
            curl_setopt($curl, CURLOPT_URL, $url);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        }
        $output = curl_exec($curl);
        curl_close($curl);
        if ($res == 'json') {
            if (curl_errno($curl)) {
                return curl_error($curl);
            } else {
                return json_decode($output, true);
            }
        }
    }

相关文章

网友评论

    本文标题:PHP网络爬虫之CURL

    本文链接:https://www.haomeiwen.com/subject/htnobqtx.html