WithCoderWithCoderWithCoder

PHP中cURL发起get和post网络请求

    我们前面的文章中介绍了“PHP的cURL的简单概念”,通过cURL可以发送get请求。另外,在提交某个表单的时候,数据通常是使用post请求的内容区域来提交的,而不是通过url参数来传递的,这种情况下,我们可以使用灵活的cURL来模拟发送post请求。本文简单介绍使用cURL发起get和post网络请求。

    cURL get请求       

    发送get请求的关键是拼装格式正确的URL。请求地址和get参数数据由一个问号“?”分割,然后单个get参数变量的名称和值用“=”分隔,而多个get参数名称和值由“&”连接。PHP为我们提供了一个函数专门用来拼装get请求的参数数据部分——http_build_query(),该函数接受一个关联数组,然后返回由该关联数据描述的get请求字符串。

    封装的代码示例如下:

/**
* @param string $url 请求url
* @param $params 请求参数,关联数组
* @param array $header 请求头数组
* @return bool|mixed|string
*/
function
get($url, $params, $header = [])
{
   $getUrl = $url . '?' . http_build_query($params);
   $ch = curl_init(); // 初始化curl

   curl_setopt($ch, CURLOPT_URL, $getUrl); // 请求的url地址
   curl_setopt($ch, CURLOPT_HEADER, 0); // 设置是否将头文件的信息作为数据流输出
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 设置为TRUE时将curl_exec()获取的信息以字符串返回,而不是直接输出

   if ($header) {
       curl_setopt($ch, CURLOPT_HTTPHEADER, $header); // 设置请求头信息
   }
   $data = curl_exec($ch); // 执行curl

   curl_close($ch); // 释放curl句柄

   return $data;
}

    cURL post请求    

    对于post请求,在我们将设置选项CURLOPT_POST设置为true时,表示网络请求为post请求。另外,我们可以使用cURL提供的选项CURLOPT_POSTFIELDS,将需要发送的参数数据放在请求正文中。

    简单的封装代码如下:

/**
* @param $url 请求url
* @param $params 请求参数,关联数组
* @param array $headers 请求头数组
* @return bool|string
*/
function
post($url, $params, $headers = [])
{
   $curl = curl_init(); // 初始化curl

   curl_setopt($curl, CURLOPT_URL, $url); // 请求的url地址
   curl_setopt($curl, CURLOPT_HEADER, 0); // 设置是否将头文件的信息作为数据流输出
   curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); // 设置请求头信息
   curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 设置为TRUE时将curl_exec()获取的信息以字符串返回,而不是直接输出
   curl_setopt($curl, CURLOPT_POST, 1);  // 设置post请求
   curl_setopt($curl, CURLOPT_POSTFIELDS, $params); //设置post数据

   $data = curl_exec($curl); // 执行curl

   curl_close($curl); // 释放curl句柄

   return $data;
}

欢迎分享交流,转载请注明出处:WithCoder » PHP中cURL发起get和post网络请求