专栏首页程序员的碎碎念PHP网络爬虫之CURL

PHP网络爬虫之CURL

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请求的各个细节。

三个重要的选项

CURLOPTURL:指定请求的URL; CURLOPTRETURNTRANSFER: 设置为1表示稍后执行的curlexec函数的返回是URL的返回字符串,而不是把返回字符串定向到标准输出并返回TRUE; CURLLOPTHEADER:设置为0表示不返回HTTP头部信息 详细查看 php官网 https://www.php.net/manual/zh/function.curl-setopt.php

  • 执行并获取结果

curl_exec()

  • 释放句柄

curl_close()

  • 常用函数

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

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

curlgetinfo:使用curlgetinfo()函数获取CURL请求输出的相关信息,以下是相关信息:

url:网络地址。 contenttype:内容编码。 httpcode:HTTP状态码。 headersize:header的大小。 requestsize:请求的大小。 filetime:文件创建的时间。 sslverifyresult:SSL验证结果。 redirectcount:跳转计数。 totaltime:总耗时。 namelookuptime:DNS查询耗时。 connecttime:等待连接耗时。 pretransfertime:传输前准备耗时。 sizeuplpad:上传数据的大小。 sizedownload:下载数据的大小。 speeddownload:下载速度。 speedupload:上传速度。 downloadcontentlength:下载内容的长度。 uploadcontentlength:上传内容的长度。 starttransfertime:开始传输的时间表。 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);            }        }    }

本文分享自微信公众号 - 程序员的碎碎念(gh_53e607dd4782),作者:沙蒿

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-04-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • php调用美图秀秀插件上传头像

    登录美图秀秀WEB开放平台(http://open.web.meitu.com/wiki/), 1.1、设置crossdomain.xml 下载cros...

    benny
  • ajax异步提交数据到数据库

    很多时候我们提交数据到服务器端数据库都是用form表单,这样子是最普通最简单提交数据的方法,你填写完表单后,post提交到后台文件.php,处理完后返回...

    benny
  • JavaScript实现登录注册验证

    学习需要坚持,堕落了一星期,学也不是,玩也不对,今天终于跑到图书馆来学习。 言归正传,今天要做的就是登录注册页面的验证和与数据库连接的操作。这...

    benny
  • 10个 ThinkPHP 开发常用代码片段

    在编写代码的时候有个神奇的汇总是好的!下面这里收集了 10+ PHP 代码片段,可以帮助你开发 PHP 项目。这些 PHP 片段对于 PHP 初学者也非常有帮助...

    php007
  • PHP使用curl取HTTP状态码

    V站CEO-西顾
  • PHP使用CURL模拟POST和GET请求

    在PHP中想要构造类似GET和POST请求,在一些APP或者等后端功能开发中是有这种需求。 在PHP语言当中有file_get_content ()函数和cur...

    WZR
  • Linux常用命令08 - curl

    curl 是一个命令行实用程序,用于将数据从服务器或传输到服务器,该服务器设计用于在没有用户交互的情况下工作。 使用 curl,您可以使用支持的协议(包括 HT...

    叉叉敌
  • php使用CURL模拟POST请求函数

    本文为仙士可原创文章,转载无需和我联系,但请注明来自仙士可博客www.php20.cn

    仙士可
  • 如何在 CentOS 8 上安装和使用 Curl

    curl是一个强大的命令行工具,主要用于本地和远程服务器之间传送数据。使用curl你可以使用各种协议下载或者上传数据,例如: HTTP, HTTPS, SCP,...

    雪梦科技
  • PHP扩展功能--cURL

    cURL 表示以命令行的形式请求某个 url, 提交数据或获取相应数据。在日常的程序开发中会用到,因此,了解 cURL 的原理和过程,有助于实际工作和项目中的应...

    程序小工

扫码关注云+社区

领取腾讯云代金券