当前位置:首页 > PHP教程 > php函数 > 列表

PHP curl get post 请求的封装函数示例【get、post、put、delete等请求类型】

发布:smiling 来源: PHP粉丝网  添加日期:2023-07-11 17:58:12 浏览: 评论:0 

这篇文章主要介绍了PHP curl get post 请求的封装函,包含了php使用curl针对get、post、put、delete等请求类型进行封装的操作技巧,以及CURLOPT_CUSTOMREQUEST控制DELETE、PUT请求类型的实现方法,需要的朋友可以参考下。

一、get

  1. //get请求 
  2. function getUrl($url$header = []) 
  3.     $ch = curl_init(); 
  4.     curl_setopt($ch, CURLOPT_URL, $url); 
  5.     curl_setopt($ch, CURLOPT_HTTPGET, true); 
  6.     if ($header) { 
  7.         curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 
  8.     } 
  9.     curl_setopt($ch, CURLOPT_TIMEOUT, 30); //设置超时时间:30s 
  10.     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); //忽略ssl检测 
  11.     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
  12.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //1 或 TRUE 将curl_exec()获取的信息以字符串返回,而不是直接输出。- 
  13.     curl_setopt($ch, CURLINFO_HEADER_OUT, true); //TRUE 时追踪句柄的请求字符串,从 PHP 5.1.3 开始可用。这个很关键,就是允许你查看请求header 
  14.     $output = curl_exec($ch); 
  15.     if (!$output) { 
  16. //        echo "request $url fail:", (array)curl_error($ch); //记录日志 
  17.     } 
  18.     curl_close($ch); 
  19. //    echo "request $url success:" . json_encode(array($url, $header, $output), true); //记录日志 
  20.     return $output

二、del

  1. //del请求 
  2. function delUrl($url$header = []) { 
  3.     $ch = curl_init(); 
  4.     curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE'); 
  5.     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); //为true,则会跟踪爬取重定向页面,否则,不会跟踪重定向页面 
  6.     curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 
  7.     curl_setopt($ch, CURLOPT_TIMEOUT, 30); //设置超时时间:30s 
  8.     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); //忽略ssl检测 
  9.     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
  10.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //1 或 TRUE 将curl_exec()获取的信息以字符串返回,而不是直接输出。- 
  11.     curl_setopt($ch, CURLINFO_HEADER_OUT, true); //TRUE 时追踪句柄的请求字符串,从 PHP 5.1.3 开始可用。这个很关键,就是允许你查看请求header 
  12.     curl_setopt($ch, CURLOPT_URL, $url); 
  13.     $output = curl_exec($ch); 
  14.     if (!$output) { 
  15. //        echo "request $url fail:", (array)curl_error($ch); //记录日志 
  16.     } 
  17.     curl_close($ch); 
  18. //    echo "request $url success:" . json_encode(array($url, $header, $output), true); //记录日志 
  19.     return $output

三、put

  1. //put请求 
  2. function putUrl($url$data = [], $header = []) { 
  3.     $ch = curl_init(); 
  4.     if (!emptyempty($data)) { 
  5.         curl_setopt($ch, CURLOPT_POSTFIELDS, $data); //定义提交的数据 
  6.     } 
  7.     curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); 
  8.     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); //为true,则会跟踪爬取重定向页面,否则,不会跟踪重定向页面 
  9.     curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 
  10.     curl_setopt($ch, CURLOPT_TIMEOUT, 30); //设置超时时间:30s 
  11.     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); //忽略ssl检测 
  12.     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
  13.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //1 或 TRUE 将curl_exec()获取的信息以字符串返回,而不是直接输出。- 
  14.     curl_setopt($ch, CURLINFO_HEADER_OUT, true); //TRUE 时追踪句柄的请求字符串,从 PHP 5.1.3 开始可用。这个很关键,就是允许你查看请求header 
  15.     curl_setopt($ch, CURLOPT_URL, $url); 
  16.     $output = curl_exec($ch); 
  17.     if (!$output) { 
  18. //        echo "request $url fail:", (array)curl_error($ch); //记录日志 
  19.     } 
  20.     curl_close($ch); 
  21. //    echo "request $url success:" . json_encode(array($url, $header, $output), true); //记录日志 
  22.     return $output

四、post

  1. //post请求 
  2. function postUrl($url$data$header = []) 
  3.     $ch = curl_init(); 
  4.     if (!emptyempty($data)) { 
  5.         curl_setopt($ch, CURLOPT_POST,true); 
  6.         curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
  7.     } 
  8.     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); //为true,则会跟踪爬取重定向页面,否则,不会跟踪重定向页面 
  9.     curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 
  10.     curl_setopt($ch, CURLOPT_TIMEOUT, 30); //设置超时时间:30s 
  11.     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); //忽略ssl检测 
  12.     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
  13.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //1 或 TRUE 将curl_exec()获取的信息以字符串返回,而不是直接输出。- 
  14.     curl_setopt($ch, CURLINFO_HEADER_OUT, true); //TRUE 时追踪句柄的请求字符串,从 PHP 5.1.3 开始可用。这个很关键,就是允许你查看请求header 
  15.     curl_setopt($ch, CURLOPT_URL, $url); 
  16.     $output = curl_exec($ch); 
  17.     if (!$output) { 
  18. //        echo "request $url fail:", (array)curl_error($ch); //记录日志 
  19.     } 
  20.     curl_close($ch); 
  21. //    echo "request $url success:" . json_encode(array($url, $header, $output), true); //记录日志 
  22.     return $output

五、post json

  1. //post json 请求 
  2. function postJsonUrl($url$data$header = []) 
  3.     $data = json_encode($data); 
  4.     $ch = curl_init(); 
  5.     if (!emptyempty($data)) { 
  6.         curl_setopt($ch, CURLOPT_POST,true); 
  7.         curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
  8.     } 
  9.     $header[]='Content-Type: application/json; charset=utf-8'
  10.     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); //为true,则会跟踪爬取重定向页面,否则,不会跟踪重定向页面 
  11.     curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 
  12.     curl_setopt($ch, CURLOPT_TIMEOUT, 30); //设置超时时间:30s 
  13.     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); //忽略ssl检测 
  14.     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
  15.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //1 或 TRUE 将curl_exec()获取的信息以字符串返回,而不是直接输出。- 
  16.     curl_setopt($ch, CURLINFO_HEADER_OUT, true); //TRUE 时追踪句柄的请求字符串,从 PHP 5.1.3 开始可用。这个很关键,就是允许你查看请求header 
  17.     curl_setopt($ch, CURLOPT_URL, $url); 
  18.     $output = curl_exec($ch); 
  19.     if (!$output) { 
  20. //        echo "request $url fail:", (array)curl_error($ch); //记录日志 
  21.     } 
  22.     curl_close($ch); 
  23. //    echo "request $url success:" . json_encode(array($url, $header, $output), true); //记录日志 
  24.     return $output

六、计算请求运行时间

可以在接口请求日志信息中记录运行时间,以便以后排查问题(程序执行缓慢,是哪个接口拖了时间)代码:

  1. $startTime = microtime(true); 
  2.         for ($i = 0; $i < 9999999; $i++) { 
  3.         }; 
  4.         $endTime = microtime(true); 
  5.         $runTime = sprintf('%.6f', ($endTime-$startTime)); 
  6.         echo "执行时间为:{$runTime} s"
  7.         die

打印:

执行时间为:0.202176 s

PS:针对常见的post、get、put、delete等请求方式,笔者经常使用postman或者ApiFox进行请求测试,并且通常前后端传输数据以json为主。 

Tags: curl get post put delete

分享到: