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

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

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

分享到: