当前位置:首页 > PHP教程 > php应用 > 列表

关于PHP的curl功能扩展基本用法

发布:smiling 来源: PHP粉丝网  添加日期:2022-06-06 08:16:21 浏览: 评论:0 

PHP的curl功能提供了很多函数,需要将这些函数按特定的步骤组合到一起,我们先来了解下PHP建立curl请求的基本步骤。

$ch = curl_init(); // 创建一个新的CURL资源赋给变量$ch

curl_setopt($ch, CURLOPT_URL, $url); // 设置URL

$response = curl_exec($ch); // 执行,获取URL并输出到浏览器

curl_close($ch); // 释放资源

如果我们希望获取内容但不输出,可以使用 CURLOPT_RETURNTRANSFER 参数,并设置其值为非0或者true值。

代码如下:

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

我们可以通设置函数curl_setopt()的不同参数,可以获得不同的结果,这也是CURL扩展的强大之处。curl_setopt()函数的常用参数选项具体可查阅官方文档,此处就不列举。

下面是我常用的curl get和post请求的方法:

get请求:

  1. public function httpGet(string $url = '') 
  2.  
  3.     { 
  4.  
  5.         // 记录请求信息的日志 
  6.  
  7.         // todo 
  8.  
  9.           
  10.  
  11.         try { 
  12.  
  13.             $ch = curl_init(); 
  14.  
  15.             curl_setopt($ch, CURLOPT_URL, $url); 
  16.  
  17.             curl_setopt($ch, CURLOPT_HEADER, 0); 
  18.  
  19.             curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
  20.  
  21.             curl_setopt($ch, CURLOPT_TIMEOUT, 60); 
  22.  
  23.             //https 请求 
  24.  
  25.             if (strlen($url) > 5 && strtolower(substr($url, 0, 5)) == "https") { 
  26.  
  27.                 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
  28.  
  29.                 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
  30.  
  31.             } 
  32.  
  33.             $response = curl_exec($ch); 
  34.  
  35.             $errorCode = curl_errno($ch); 
  36.  
  37.             curl_close($ch); 
  38.  
  39.             if (!emptyempty($errorCode)) { 
  40.  
  41.                 // 可记录错误码日志 
  42.  
  43.                 return null; 
  44.  
  45.             } 
  46.  
  47.             // 记录返回结果日志 
  48.  
  49.             return $response; 
  50.  
  51.         } catch (\Exception $e) { 
  52.  
  53.             $errorLog = [ 
  54.  
  55.                 'msg' => $e->getMessage(), 
  56.  
  57.                 'trace' => $e->getTraceAsString(), 
  58.  
  59.                 'data' => [ 
  60.  
  61.                     'url' => $url, 
  62.  
  63.                 ] 
  64.  
  65.             ]; 
  66.  
  67.             // 记录错误日志 
  68.  
  69.             return null; 
  70.  
  71.         } 
  72.  
  73.     } 

POST请求:

  1. public function httpPost(string $url = '', array $data = []) 
  2.  
  3. { 
  4.  
  5.         // 记录请求信息的日志 
  6.  
  7.         // todo 
  8.  
  9.     try { 
  10.  
  11.         $jsonData = json_encode($data); 
  12.  
  13.         $curl = curl_init(); 
  14.  
  15.         curl_setopt($curl, CURLOPT_URL, $url); 
  16.  
  17.         curl_setopt($curl, CURLOPT_POST, 1); 
  18.  
  19.         curl_setopt($curl, CURLOPT_POSTFIELDS, $jsonData); 
  20.  
  21.         curl_setopt($curl, CURLOPT_HEADER, 0); 
  22.  
  23.         curl_setopt($curl, CURLOPT_TIMEOUT, 60); 
  24.  
  25.         curl_setopt($curl, CURLOPT_HTTPHEADER, [ 
  26.  
  27.             'Content-Type: application/json; charset=utf-8', 
  28.  
  29.             'Content-Length:' . strlen($jsonData) 
  30.  
  31.         ]); 
  32.  
  33.         curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
  34.  
  35.         //https 请求 
  36.  
  37.         if (strlen($url) > 5 && strtolower(substr($url, 0, 5)) == "https") { 
  38.  
  39.             curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
  40.  
  41.             curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); 
  42.  
  43.         } 
  44.  
  45.         $result = curl_exec($curl); 
  46.  
  47.         $errorCode = curl_errno($curl); 
  48.  
  49.         curl_close($curl); 
  50.  
  51.         if (!emptyempty($errorCode)) { 
  52.  
  53.             // 可记录错误码日志 
  54.  
  55.             return null; 
  56.  
  57.         } 
  58.  
  59.         // 记录返回结果日志 
  60.  
  61.         return json_decode($result, true); 
  62.  
  63.     } catch (\Exception $e) { 
  64.  
  65.         $errorData = [ 
  66.  
  67.             'msg' => $e->getMessage(), 
  68.  
  69.             'trace' => $e->getTraceAsString(), 
  70.  
  71.             'data' => [ 
  72.  
  73.                 'url' => $url, 
  74.  
  75.                 'postData' => $data 
  76.  
  77.             ] 
  78.  
  79.         ]; 
  80.  
  81.         // 记录错误日志 
  82.  
  83.         return null; 
  84.  
  85.     } 
  86.  
  87. } 

本文系转载,原文地址是:

https://tsmliyun.github.io/php/PHP%E7%9A%84CURL%E5%8A%9F%E8%83%BD%E6%89%A9%E5%B1%95%E5%9F%BA%E6%9C%AC%E7%94%A8%E6%B3%95/

Tags: curl

分享到: