php调用其他接口的post或者get或者delete或者put的方式

本文详细介绍了 PHP 中 cURL 函数的基本使用,包括函数列表与常见操作如 GET、POST 请求的实现。同时,提供了增强版的请求方法,支持 JSON 数据传输,适用于 POST 和 DELETE 请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.PHP cURL函数基本列表

curl_close()	//关闭一个cURL会话
curl_copy_handle()	//复制一个cURL句柄和它的所有选项
curl_errno()	//返回最后一次的错误号
curl_error()	//返回一个保护当前会话最近一次错误的字符串
curl_escape()	//返回转义字符串,对给定的字符串进行URL编码
curl_exec()	//执行一个cURL会话
curl_file_create()	//创建一个CURLFile对象
curl_getinfo()	//获取一个cURL连接资源句柄的信息
curl_init()	//初始化一个cURL会话
curl_multi_add_handle()	//向curl批处理会话中添加单独的curl句柄
curl_multi_close()	//关闭一组cURL句柄
curl_multi_exec()	//运行当前cURL句柄的子连接
curl_multi_getcontent()	//如果设置了CURLOPT_RETURNTRANSFER,则返回获取的输出的文本流
curl_multi_info_read()	//获取当前解析的cURL的相关传输信息
curl_multi_init()	//返回一个新cURL批处理句柄
curl_multi_remove_handle()	//移除curl批处理句柄资源中的某个句柄资源
curl_multi_select()	//等待所有cURL批处理中的活动连接
curl_multi_setopt()	//设置一个批处理cURL传输选项
curl_multi_strerror()	//返回描述错误码的字符串文本
curl_pause()	//暂停及恢复连接
curl_reset()	//重置libcurl的会话句柄的所有选项
curl_setopt_array()	//为cURL传输会话批量设置选项
curl_setopt()	//设置一个cURL传输选项
curl_share_close()	//关闭cURL共享句柄
curl_share_init()	//初始化cURL共享句柄
curl_share_setopt()	//设置一个共享句柄的cURL传输选项
curl_strerror()	//返回错误代码的字符串描述
curl_unescape()	//解码URL编码后的字符串
curl_version()	//获取cURL版本信息

2.HTTP的方式请求函数实现

/**
 * 发送HTTP请求方法
 * @param  string $url    请求URL
 * @param  array  $params 请求参数
 * @param  string $method 请求方法GET/POST
 * @return array  $data   响应数据
 */
function http($url, $params, $method = 'GET', $header = array(), $multi = false){
    $opts = array(
            CURLOPT_TIMEOUT        => 30,
            CURLOPT_RETURNTRANSFER => 1,
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_SSL_VERIFYHOST => false,
            CURLOPT_HTTPHEADER     => $header
    );
    /* 根据请求类型设置特定参数 
   *  strtoupper() 函数把字符串转换为大写。
    */

    switch(strtoupper($method)){
        case 'GET':
            $opts[CURLOPT_URL] = $url . '?' . http_build_query($params);
            break;
        case 'POST':
            //判断是否传输文件
            $params = $multi ? $params : http_build_query($params);
            $opts[CURLOPT_URL] = $url;
            $opts[CURLOPT_POST] = 1;
            $opts[CURLOPT_POSTFIELDS] = $params;
            break;
        default:
            throw new Exception('不支持的请求方式!');
    }
    /* 初始化并执行curl请求 */
    $ch = curl_init();
    curl_setopt_array($ch, $opts);
    $data  = curl_exec($ch);
    $error = curl_error($ch);
    curl_close($ch);
    if($error) throw new Exception('请求发生错误:' . $error);
    return  $data;
}

3.上面函数的调用方式:

//定义一个要发送的目标URL;
$url = "https://www.xxx.com";
//定义传递的参数数组;
$data['aaa']='aaaaa';
$data['bbb']='bbbb';
//定义返回值接收变量;
$httpstr = http($url, $data, 'POST', array("Content-type: text/html; charset=utf-8"));

4.调用其他请求方式的接口,其中提供了delete请求两种方案:

/**
 * [http 调用接口函数]
 * @param  string       $url     [接口地址]
 * @param  array        $params  [数组]
 * @param  string       $method  [GET\POST\DELETE\PUT]
 * @param  array        $header  [HTTP头信息]
 * @param  integer      $timeout [超时时间]
 * @return [type]                [接口返回数据]
 */
function http($url, $params, $method = 'GET', $header = array(), $timeout = 5)
{
    // POST 提交方式的传入 $set_params 必须是字符串形式
    $opts = array(
        CURLOPT_TIMEOUT => $timeout,
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_SSL_VERIFYHOST => false,
        CURLOPT_HTTPHEADER => $header
    );
    //http_build_query会把数组压成字符串以&符号连接,
    /* 根据请求类型设置特定参数 */
    switch (strtoupper($method)) {
        case 'GET':
            $opts[CURLOPT_URL] = $url . '?' . http_build_query($params);
            break;
        case 'POST':
            $params = http_build_query($params);
            $opts[CURLOPT_URL] = $url;
            $opts[CURLOPT_POST] = 1;
            $opts[CURLOPT_POSTFIELDS] = $params;
            break;
      //调用delete接口方案1:
        case 'DELETE':
            $opts[CURLOPT_URL] = $url;
            $opts[CURLOPT_HTTPHEADER] = array("X-HTTP-Method-Override: DELETE");
            $opts[CURLOPT_CUSTOMREQUEST] = 'DELETE';
            $opts[CURLOPT_POSTFIELDS] = $params;
            break;
      //如果delete方案1不行,用方案2:
        case 'DELETEGET':
            $opts[CURLOPT_HTTPHEADER] = array("X-HTTP-Method-Override: DELETE");
            $opts[CURLOPT_CUSTOMREQUEST] = 'DELETE';
            $opts[CURLOPT_URL] = $url . '?' . http_build_query($params);
        case 'PUT':
            $opts[CURLOPT_URL] = $url;
            $opts[CURLOPT_POST] = 0;
            $opts[CURLOPT_CUSTOMREQUEST] = 'PUT';
            $opts[CURLOPT_POSTFIELDS] = $params;
            break;
        default:
            throw new Exception('不支持的请求方式!');
    }
  
    /* 初始化并执行curl请求 */
    $ch = curl_init();
    curl_setopt_array($ch, $opts);
    $data = curl_exec($ch);
    $error = curl_error($ch);
    return $data;
}

5.加强版,最近有需求post和delete要传数组,以json方式

    /**
     * 发送HTTP请求方法
     * @param  string $url    请求URL
     * @param  array  $params 请求参数
     * @param  string $method 请求方法GET/POST/DELETE
     * @return array  $data   响应数据
     */
    public function sendReqGetOrPostOrDelete(
          $url, $params, $method = 'GET', $header = array(), $multi = false,$isPostJson = false,$isDeleteJson = false
    ){
        if($isPostJson){
            $params = json_encode($params);
            $curl = curl_init($url);
            curl_setopt($curl, CURLOPT_TIMEOUT, 30);
            curl_setopt($curl, CURLOPT_HEADER, false);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
            curl_setopt($curl, CURLOPT_POST, true);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
            $resp['data'] = curl_exec($curl);
            $resp['http_code'] = curl_getinfo($curl, CURLINFO_HTTP_CODE);
            $resp['error'] = curl_error($curl);
            $resp['errno'] = curl_errno($curl);
            curl_close($curl);
        }else if($isDeleteJson){
            $curl = curl_init();
            curl_setopt($curl, CURLOPT_TIMEOUT, 30);
            curl_setopt($curl, CURLOPT_URL, $url);
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "DELETE");
            curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($params));
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
            $resp['data'] = curl_exec($curl);
            $resp['http_code'] = curl_getinfo($curl, CURLINFO_HTTP_CODE);
            $resp['error'] = curl_error($curl);
            $resp['errno'] = curl_errno($curl);
            curl_close($curl);
        }else{
            $opts = array(
                CURLOPT_TIMEOUT        => 30,
                CURLOPT_RETURNTRANSFER => 1,
                CURLOPT_SSL_VERIFYPEER => false,
                CURLOPT_SSL_VERIFYHOST => false,
                CURLOPT_HTTPHEADER     => $header
            );
            /* 根据请求类型设置特定参数 */
            switch(strtoupper($method)){
                case 'GET':
                    $opts[CURLOPT_URL] = $url . '?' . http_build_query($params);
                    break;
                case 'POST':
                    //判断是否传输文件
                    $params = $multi ? $params : http_build_query($params);
                    $opts[CURLOPT_URL] = $url;
                    $opts[CURLOPT_POST] = 1;
                    $opts[CURLOPT_POSTFIELDS] = $params;
                    break;
                case 'DELETE':
                    $opts[CURLOPT_HTTPHEADER] = array("X-HTTP-Method-Override: DELETE");
                    $opts[CURLOPT_CUSTOMREQUEST] = 'DELETE';
                    $opts[CURLOPT_URL] = $url . '?' . http_build_query($params);
                    break;
                case 'PUT':
                    $opts[CURLOPT_URL] = $url;
                    $opts[CURLOPT_CUSTOMREQUEST] = 'PUT';
                    $opts[CURLOPT_POSTFIELDS] = http_build_query($params);
                    break;
                default:
                    throw new Exception('不支持的请求方式!');
            }
            /* 初始化并执行curl请求 */
            $ch = curl_init();
            curl_setopt_array($ch, $opts);
            $resp['data'] = curl_exec($ch);
            $resp['http_code'] = curl_getinfo($ch, CURLINFO_HTTP_CODE);
            $resp['error'] = curl_error($ch);
            $resp['errno'] = curl_errno($ch);
            curl_close($ch);
        }
        Doo::logger()->writeLog("REQ[url: $url,params: $params, result: " . json_encode($resp) . ", method: $method]", $this->log_file);
        if(!$resp['errno']){
        }
        return  $resp;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值