V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zencoding
V2EX  ›  PHP

分享一个自用的 PHP-Curl 类 https://github.com/wenpeng/PHP-Curl/

  •  
  •   zencoding · 2016-01-04 08:58:56 +08:00 · 4519 次点击
    这是一个创建于 3247 天前的主题,其中的信息可能已经有所发展或是发生改变。

    关于

    PHP-Curl 是一个轻量级的网络操作类,实现 GET 、 POST 、 UPLOAD 、 DOWNLOAD 常用操作,支持链式写法

    需求

    对低版本做了向下支持,但建议使用 PHP 5.3 +

    示例

    GET:
    $this->curl->get(目标网址);
    
    POST:
    $this->curl->post(变量名, 变量值)->post(多维数组)->submit(目标网址);
    
    DOWNLOAD:
    $this->curl->download(文件地址)->save(保存路径);
    
    UPLOAD:
    $this->curl->post(多维数组)->upload($_FILE 字段, 本地路径, 文件类型, 原始名称)->submit(目标网址);
    
    配置

    参考:http://php.net/manual/en/function.curl-setopt.php
    php
    $this->curl->set('CURLOPT_选项', 值)->post(多维数组)->submit(目标网址);

    自动重试
    // 出错自动重试 3 次(默认不启用)
    $this->curl->retry(3)->post(多维数组)->submit(目标网址);
    
    19 条回复    2016-01-23 08:34:30 +08:00
    BOYPT
        1
    BOYPT  
       2016-01-04 09:09:00 +08:00
    一般 composer require php-curl-class/php-curl-class
    不再折腾其他封装
    fising
        2
    fising  
       2016-01-04 09:24:54 +08:00
    不应该是 $curl->get(目标网址); 吗,为何是 $this->curl->get(目标网址);
    hahasong
        3
    hahasong  
       2016-01-04 09:26:34 +08:00 via Android
    简单的事情搞复杂了,原生的封装一个函数搞定
    yangqi
        4
    yangqi  
       2016-01-04 09:42:52 +08:00
    新收发问,这个解决了什么问题? 有什么好处?为什么要封装啊
    lmfx89
        5
    lmfx89  
       2016-01-04 09:43:24 +08:00
    @hahasong 但每次去复制函数很麻烦吧,写成类库其他项目或者人想用之类引用就可以了。 谢谢 LZ 分享。
    zencoding
        6
    zencoding  
    OP
       2016-01-04 09:47:22 +08:00
    @fising 实例化时 $curl = new Curl 也是 ok 的

    @yangqi 结构很简单,看源码就知道了
    Yien
        7
    Yien  
       2016-01-04 09:51:27 +08:00 via iPhone
    谢谢
    anyforever
        8
    anyforever  
       2016-01-04 10:18:19 +08:00
    干净整洁利落,已 star
    micookie
        9
    micookie  
       2016-01-04 11:22:02 +08:00
    不错,学习了
    falcon05
        10
    falcon05  
       2016-01-04 12:35:38 +08:00
    我都是用 composer 安装的 curl/curl ,主要是 cookie 操作不太方便,这个我试试怎么样
    mrgeneral
        11
    mrgeneral  
       2016-01-04 17:33:22 +08:00
    简单的就自己写了,小项目就用 curl-class ,复杂点的就可以上 guzzle 了
    zencoding
        12
    zencoding  
    OP
       2016-01-04 19:26:43 +08:00
    @mrgeneral 这个就是在处理一个小项目时封装的简单轮子
    wd0g
        13
    wd0g  
       2016-01-14 13:47:54 +08:00
    可以自动设置更新 cookie 吗?
    如果可以的话就不错了
    我之前写的 CURL 支持自动更新 cookie 哦~~哈哈哈哈哈哈
    zencoding
        14
    zencoding  
    OP
       2016-01-14 14:13:11 +08:00
    @wd0g

    当然可以实现,这里是一个小例子

    ```php

    $curl = new Curl;
    $cookie = '/tmp/test_cookie_file';
    $option = array(
    'CURLOPT_COOKIEJAR' => $cookie,
    'CURLOPT_COOKIEFILE' => $cookie
    );
    $curl->set($option)->get('http://www.baidu.com');

    ```
    wd0g
        15
    wd0g  
       2016-01-14 18:04:26 +08:00
    @zencoding markdown 语法不能用~~~
    wd0g
        16
    wd0g  
       2016-01-14 18:04:41 +08:00
    ```
    print xxoo
    ```
    ioven
        17
    ioven  
       2016-01-15 19:54:19 +08:00
    和 requests 有什么不同吗
    sswowo
        18
    sswowo  
       2016-01-21 17:28:14 +08:00
    楼主也喜欢塔叔
    zencoding
        19
    zencoding  
    OP
       2016-01-23 08:34:30 +08:00 via Android
    @sswowo 嗯呢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2682 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 06:03 · PVG 14:03 · LAX 22:03 · JFK 01:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.