使用cURL实现Get和Post请求的方法

本文最后更新于:2023年12月5日 晚上

cURL 是一个利用 URL 语法规则来进行传输文件和数据的工具。PHP 也支持 cURL 库。

在 PHP 中建立 cURL 请求的基本步骤

  1. 初始化 curl_init()
  2. 设置变量 curl_setopt()
  3. 执行并获取结果 curl_exec()
  4. 释放 cURL 句柄 curl_close()
/**
* @param $url
* @param int $type 0 get  1 post
* @param array $data
*/
function doCurl($url, $type=0, $data=[]) {
    $ch = curl_init(); // 初始化
    // 设置选项
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER,0);
    if($type == 1) {
        // post
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    }
    //执行并获取内容
    $output = curl_exec($ch);
    // 释放curl句柄
    curl_close($ch);
    return $output;
}

上述四个步骤中, 其中第二步最为关键, 可以设置一些高级选项 :

  • 设置请求地址:
    curl_setopt($ch, CURLOPT_URL, $url);

  • 由于 https 协议会对数据进行加密处理, 需要服务器配置证书. 设置 curl 不要对证书进行验证:
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CHRLOPT_SSL_VERIFYHOST, false);

  • curl_exec($ch)直接输出对应URL返回的数据, 字符串格式, 如果发生错误, 则返回false. (判断是否false使用===全等), 所以我们要设置获取的信息以文件流的形式返回, 而不是直接输出浏览器:
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true)

  • 以 POST 的方式发起请求
    curl_setopt($ch, CURLOPT_POST, 1);

  • 发送请求, POST 格式, $data就是发送的数据
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

curl 通过 CURLFile 类实现文件数据的读取。注意: CURLFile 在 php5.5 版本以上使用

$file = new CURLFile(文件的绝对路径); 返回一个对象 :

object(CURLFile)#1 (3) { ["name"]=> string(15) "./黑天鹅.jpg" ["mime"]=> string(0) "" ["postname"]=> string(0) "" }

cURL 上传文件

PHP 使用 CURL 上传文件只需发送一个 POST 请求就可以了,在请求中设置某个字段为需要上传的文件全路径,并且以“@”开头,然后使用 CURL 把该变量以 POST 方式发送到服务器,在服务端即可以从超级全局变量$_FILES 中取到相应的上传文件信息。

如果使用了-F 参数,curl 会以 multipart/form-data 的方式发送 POST 请求。-F 以 key=value 的形式指定要上传的参数,如果是文件,则需要使用 key=@file 的形式


使用cURL实现Get和Post请求的方法
http://blog.lujinkai.cn/PHP/基础/使用cURL实现Get和Post请求的方法/
作者
像方便面一样的男子
发布于
2020年12月9日
更新于
2023年12月5日
许可协议