PHP 支持 Daniel Stenberg 创建的 libcurl 库。libcurl 同时支持 HTTPS 证书、HTTP POST、HTTP PUT、 FTP 上传(也能通过 PHP 的 FTP 扩展完成)、HTTP 基于表单的上传、代理、cookies、用户名+密码的认证。

  • curl_init — 初始化 cURL 会话
    // 创建一个新 cURL 资源
    
    
    

$ch = curl_init();

// 设置 URL 和相应的选项
$options = array(CURLOPT_URL => 'http://www.9ong.com/',
                CURLOPT_HEADER => false
                );

curl_setopt_array($ch, $options);

// 抓取 URL 并把它传递给浏览器
curl_exec($ch);

// 关闭 cURL 资源,并且释放系统资源
curl_close($ch);
```
  • curl_exec — 执行 cURL 会话

  • curl_close — 关闭 cURL 会话

    关闭 cURL 会话并且释放所有资源。cURL 句柄 ch 也会被删除。

  • curl_setopt — 设置 cURL 传输选项

    更多option设置详见官方文档:PHP: curl_setopt - Manual

  • curl_setopt_array — 为 cURL 传输会话批量设置选项

    为 cURL 传输会话批量设置选项。这个函数对于需要设置大量的 cURL 选项是非常有用的,不需要重复地调用 curl_setopt()。

  • curl_copy_handle — 复制一个cURL句柄和它的所有选项

    复制一个cURL句柄并保持相同的选项。

  • curl_getinfo — 获取一个cURL连接资源句柄的信息

  • curl_errno — 返回最后一次的错误代码

  • curl_error — 返回当前会话最后一次错误的字符串

  • curl_strerror — 返回错误代码的字符串描述

    // 检测错误,显示错误信息
    if($errno = curl_errno($ch)) {
        $error_message = curl_strerror($errno);
        echo "cURL error ({$errno}):\n {$error_message}";
    }
    
  • curl_escape — 使用 URL 编码给定的字符串

    该函数使用 URL 根据» RFC 3986编码给定的字符串。和rawurlencode()都是按照RFC 3986对URL进行编码。

  • curl_unescape — 解码给定的 URL 编码的字符串

  • curl_version — 获取 cURL 版本信息

  • curl_multi_init — 返回一个新cURL批处理句柄

    允许并行地处理批处理cURL句柄。

    // 创建一对cURL资源
    $ch1 = curl_init();
    $ch2 = curl_init();
    
    // 设置URL和相应的选项
    curl_setopt($ch1, CURLOPT_URL, "http://www.9ong.com/");
    curl_setopt($ch1, CURLOPT_HEADER, 0);
    curl_setopt($ch2, CURLOPT_URL, "http://www.php.net/");
    curl_setopt($ch2, CURLOPT_HEADER, 0);
    
    // 创建批处理cURL句柄
    $mh = curl_multi_init();
    
    // 增加2个句柄
    curl_multi_add_handle($mh,$ch1);
    curl_multi_add_handle($mh,$ch2);
    
    $running=null;
    // 执行批处理句柄
    do {
        curl_multi_exec($mh,$running);
    } while($running > 0);
    
    // 关闭全部句柄
    curl_multi_remove_handle($mh, $ch1);
    curl_multi_remove_handle($mh, $ch2);
    curl_multi_close($mh);
    
  • curl_multi_add_handle — 向curl批处理会话中添加单独的curl句柄

  • curl_multi_exec — 运行当前 cURL 句柄的子连接

    处理在栈中的每一个句柄。无论该句柄需要读取或写入数据都可调用此方法。

  • curl_multi_setopt — 为 cURL 并行处理设置一个选项

  • curl_multi_close — 关闭一组cURL句柄

  • curl_multi_errno — 返回上一次 curl 批处理的错误码

  • curl_multi_strerror — 返回字符串描述的错误代码

  • curl_multi_getcontent — 如果设置了CURLOPT_RETURNTRANSFER,则返回获取的输出的文本流

  • curl_multi_info_read — 获取当前解析的cURL的相关传输信息

  • curl_multi_remove_handle — 移除cURL批处理句柄资源中的某个句柄资源

  • curl_multi_select — 等待所有cURL批处理中的活动连接

  • curl_share_init — 初始化一个 cURL 共享句柄。

    运行在 cURL 句柄之间共享数据。

    // 创建 cURL 共享句柄,并设置共享 cookie 数据
    $sh = curl_share_init();
    curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);
    
    // 初始化第一个 cURL 句柄,并将它设置到共享句柄
    $ch1 = curl_init("http://9ong.com/");
    curl_setopt($ch1, CURLOPT_SHARE, $sh);
    
    // 执行第一个 cURL 句柄
    curl_exec($ch1);
    
    // 初始化第二个 cURL 句柄,并将它设置到共享句柄
    $ch2 = curl_init("http://php.net/");
    curl_setopt($ch2, CURLOPT_SHARE, $sh);
    
    // 执行第二个 cURL 句柄
    //  all cookies from $ch1 handle are shared with $ch2 handle
    curl_exec($ch2);
    
    // 关闭 cURL 共享句柄
    curl_share_close($sh);
    
    // 关闭 cURL 共享句柄
    curl_close($ch1);
    curl_close($ch2);
    
    
  • curl_share_close — 关闭 cURL 共享句柄

  • curl_share_setopt — 为 cURL 共享句柄设置选项。

  • curl_share_errno — 返回共享 curl 句柄的最后一次错误号

  • curl_share_strerror — 返回错误号对应的错误消息

  • curl_pause — 暂停和取消暂停一个连接。

  • curl_reset — 重置一个 libcurl 会话句柄的所有的选项

  • curl_file_create — 创建一个 CURLFile 对象

    创建 CURLFile 对象,使用 CURLOPT_POSTFIELDS 选项上传文件。

    这是采用过程化函数实现创建上传文件对象:

    curl_file_create( string $filename[, string $mimetype[, string $postname]] ) : CURLFile
    

    另外php5.5以后提供了面向对象创建上传文件对象的方式:

    public CURLFile::__construct( string $filename[, string $mimetype[, string $postname]] )
    
      
    // Create a cURL handle
    $ch = curl_init('http://example.com/upload.php');
    
    // 通过过程化函数创建上传文件对象
    $cfile = curl_file_create('cats.jpg','image/jpeg','test_name');
    // 通过构造器创建上传文件对象
    //$cfile = new CURLFile('cats.jpg','image/jpeg','test_name');
    
    // Assign POST data
    $data = array('test_file' => $cfile);
    curl_setopt($ch, CURLOPT_POST,1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    
    // Execute the handle
    curl_exec($ch);