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

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;
}

 

你可能感兴趣的:(php)