php的curl封装类

之前一直做爬虫相关的,每次自己去写一系列curl_setopt()函数太繁琐,我于是封装了如下curl请求类。

<?php
/**
 * @author freephp
 * @date 2015-11-13
 *
 */
class MyCurl {
    private static  $url = ‘‘; // 访问的url
    private static $oriUrl = ‘‘; // referer url
    private static $data = array(); // 可能发出的数据 post,put
    private   static $method; // 访问方式,默认是GET请求

    public static function send($url, $data = array(), $method = ‘get‘) {
        if (!$url) exit(‘url can not be null‘);
        self::$url = $url;
        self::$method = $method;
        $urlArr = parse_url($url);
        self::$oriUrl = $urlArr[‘scheme‘] .‘://‘. $urlArr[‘host‘];
        self::$data = $data;
        if ( !in_array(
                self::$method,
                array(‘get‘, ‘post‘, ‘put‘, ‘delete‘)
             )
           ) {
                    exit(‘error request method type!‘);
             }

                $func = self::$method . ‘Request‘;
                return self::$func(self::$url);
    }
    /**
     * 基础发起curl请求函数
     * @param int $is_post 是否是post请求
     */
    private  function doRequest($is_post = 0) {
        $ch = curl_init();//初始化curl
        curl_setopt($ch, CURLOPT_URL, self::$url);//抓取指定网页
        curl_setopt($ch, CURLOPT_AUTOREFERER, true);
        // 来源一定要设置成来自本站
        curl_setopt($ch, CURLOPT_REFERER, self::$oriUrl);

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
        if($is_post == 1) curl_setopt($ch, CURLOPT_POST, $is_post);//post提交方式
        if (!empty(self::$data)) {
            self::$data = self::dealPostData(self::$data);
            curl_setopt($ch, CURLOPT_POSTFIELDS, self::$data);
        }

        $data = curl_exec($ch);//运行curl
        curl_close($ch);
        return $data;
    }
    /**
     * 发起get请求
     */
    public function getRequest() {
        return self::doRequest(0);
    }
    /**
     * 发起post请求
     */
    public function postRequest() {
        return self::doRequest(1);
    }
    /**
     * 处理发起非get请求的传输数据
     *
     * @param array $postData
     */
    public function dealPostData($postData) {
        if (!is_array($postData)) exit(‘post data should be array‘);
        foreach ($postData as $k => $v) {
            $o .= "$k=" . urlencode($v) . "&";
        }
        $postData = substr($o, 0, -1);
        return $postData;
    }
    /**
     * 发起put请求
     */
    public function putRequest($param) {
        return self::doRequest(2);
    }

    /**
     * 发起delete请求
     */
    public function deleteRequest($param) {
        return self::doRequest(3);
    }

}
/* $curl = new MyCurl(‘http://www.jumei.com‘,array(), ‘get‘);
$res = $curl->send(); */
$res = MyCurl::send(‘http://www.ipip.net/ip.html‘,array(‘ip‘ => ‘61.142.206.145‘),‘post‘);

var_dump($res);die();

考虑到可能会有循环调用的可能和高并发,为了减少内存堆的不必要消耗,我只对客户端调用提供静态方法。为了类的单一职责,MyCurl只做发请求和返回data的作用,对返回数据的处理交给其他代码。

时间: 2024-11-08 03:44:12

php的curl封装类的相关文章

VS2015静态编译libcurl(C++ curl封装类)

一.最新libcurl静态编译教程(curl-7.51版/curl-7.52版) 1.安装perl,在官网下载,安装好以后,测试perl -v是否成功 2.编译openssl(已编译好的下载地址) perl Configure VC-WIN32 --prefix=D:\openssl ms\do_ms.bat nmake -f ms\nt.mak(静态编译) nmake -f ms\nt.mak install 3.下载libcurl(已编译好的7.51版下载地址 7.52版下载地址) 在源码的

php curl封装类

一个php curl封装的类,减少代码量,简化采集工作.这个类也是我工作的最常用的类之一.这里分享给大家.配合上phpquery,十分好用. <?php namespace iphp\core; use iphp\App; /** * 封装了的curl http请求类 * @author xuen */ class MyCurl { public $ch; // 当前链接对象 public $str = ''; // 当前串 public $match; // 正则表达式 /** * 将curl

CURL PHP模拟浏览器get和post

模拟浏览器get和post数据需要经常用到的类, 在这里收藏了几个不错的方法 方法一 <?php define ( 'IS_PROXY', true ); //是否启用代理 /* cookie文件 */ $cookie_file = dirname ( __FILE__ ) . "/cookie_" . md5 ( basename ( __FILE__ ) ) . ".txt"; // 设置Cookie文件保存路径及文件名 /*模拟浏览器*/ $user_a

《CURL技术知识教程》系列技术文章整理收藏

<CURL技术知识教程>系列技术文章整理收藏 1PHP采集相关教程之一 CURL函数库 2php中通过curl模拟登陆discuz论坛的实现代码 3php中通过curl smtp发送邮件 4PHP curl 并发最佳实践代码分享 5CURL的学习和应用(附多线程实现) 6php curl模仿ftp文件上传代码 7php使用curl来获取远程图片 8PHP Curl多线程原理实例详解 9curl不使用文件存取cookie php使用curl获取cookie示例 10php使用curl抓取qq空间

《CURL技术知识教程》系列技术教程整理

<CURL技术知识教程>系列技术教程整理 有时间会不断更新,大家有什么好的推荐的可以在下面回复,我会酌情收录 1PHP采集相关教程之一 CURL函数库 2php中通过curl模拟登陆discuz论坛的实现代码 3php中通过curl smtp发送邮件 4PHP curl 并发最佳实践代码分享 5CURL的学习和应用(附多线程实现) 6php curl模仿ftp文件上传代码 7php使用curl来获取远程图片 8PHP Curl多线程原理实例详解 9curl不使用文件存取cookie php使用

《CURL技术知识教程》系列分享专栏

<CURL技术知识教程>已整理成PDF文档,点击可直接下载至本地查阅https://www.webfalse.com/read/201737.html 文章 PHP采集相关教程之一 CURL函数库 php中通过curl模拟登陆discuz论坛的实现代码 php中通过curl smtp发送邮件 PHP curl 并发最佳实践代码分享 CURL的学习和应用(附多线程实现) php curl模仿ftp文件上传代码 php使用curl来获取远程图片 PHP Curl多线程原理实例详解 curl不使用文

简化日常工作系列之二 ----- 定时采集小说

2.去跑一遍采集小说的脚本任务 为了减少依赖,之前采集小说的实现是两部分: 第一部分:nodejs去目录页抓取章节的url,写入txt文件存储. 第二部分:php利用封装的curl类和分析解析类去分别获取标题内容,写入HTML文件. 这样不仅要让进行定时任务的物理机或docker上要有php环境也要有nodejs环境.由于我擅长php,所以改为两部分全部由php完成.采集的完整代码可以见前面写过的采集类等博客. curl封装类beta版的博客记录: http://www.cnblogs.com/

[php]微信测试号调取acces_token,自定义菜单以及被动响应消息

1 <?php 2 /**自己写的 */ 3 $wechatObj = new wechatCallbackapiTest(); 4 $wechatObj->valid(); 5 $wechatObj->responseMsg();//响应消息 6 $wechatObj->set_menu();//自定义菜单 7 8 class wechatCallbackapiTest 9 { 10 /** 11 * 绑定url.token信息 12 */ 13 public function

微信支付错误两个问题的解决:curl出错,错误码:60

如下是运行微信支付测试代码时出错代码: Warning: curl_setopt() expects parameter 2 to be long, string given in D:\wwwroot\weixinpaytest\pay\WxPay.JsApiPay.php on line 99 Fatal error: Uncaught exception 'WxPayException' with message 'curl出错,错误码:60' in D:\wwwroot\weixinpa