• PHP封装CURL类 请求第三方地址


    1. namespace app\common\service;
    2. class CurlService //postget 请求第三方接口
    3. {
    4. /**
    5. * CURL GET || post请求
    6. * @desc: GET与post都通用
    7. * @param: $url 请求的地址
    8. * $isPostRequest 默认true是GET请求,否则是POST请求
    9. * $data array 请求的参数
    10. * $certParam array ['cert_path'] ['key_path']
    11. * @return:
    12. */
    13. public function curl_http($url, $isPostRequest = false, $data = [], $header = [], $certParam = [])
    14. { // 模拟提交数据函数
    15. $curlObj = curl_init(); // 启动一个CURL会话
    16. //如果是POST请求
    17. if ($isPostRequest) {
    18. curl_setopt($curlObj, CURLOPT_POST, 1); // 发送一个常规的Post请求
    19. curl_setopt($curlObj, CURLOPT_POSTFIELDS, http_build_query($data)); // Post提交的数据包
    20. } else { //get请求检查是否拼接了参数,如果没有,检查$data是否有参数,有参数就进行拼接操作
    21. $getParamStr = '';
    22. if (!empty($data) && is_array($data)) {
    23. $tmpArr = [];
    24. foreach ($data as $k => $v) {
    25. $tmpArr[] = $k . '=' . $v;
    26. }
    27. $getParamStr = implode('&', $tmpArr);
    28. }
    29. //检查链接中是否有参数
    30. $url .= strpos($url, '?') !== false ? '&' . $getParamStr : '?' . $getParamStr;
    31. }
    32. curl_setopt($curlObj, CURLOPT_URL, $url); // 要访问的地址
    33. //检查链接是否https请求
    34. if (strpos($url, 'https') !== false) {
    35. //设置证书
    36. if (!empty($certParam) && isset($certParam['cert_path']) && isset($certParam['key_path'])) {
    37. curl_setopt($curlObj, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
    38. curl_setopt($curlObj, CURLOPT_SSL_VERIFYHOST, 2); // 从证书中检查SSL加密算法是否存在
    39. //设置证书
    40. //使用证书:cert 与 key 分别属于两个.pem文件
    41. curl_setopt($curlObj, CURLOPT_SSLCERTTYPE, 'PEM');
    42. curl_setopt($curlObj, CURLOPT_SSLCERT, $certParam['cert_path']);
    43. curl_setopt($curlObj, CURLOPT_SSLKEYTYPE, 'PEM');
    44. curl_setopt($curlObj, CURLOPT_SSLKEY, $certParam['key_path']);
    45. } else {
    46. curl_setopt($curlObj, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
    47. curl_setopt($curlObj, CURLOPT_SSL_VERIFYHOST, 0); // 从证书中检查SSL加密算法是否存在
    48. }
    49. }
    50. // 模拟用户使用的浏览器
    51. if (isset($_SERVER['HTTP_USER_AGENT'])) {
    52. curl_setopt($curlObj, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
    53. }
    54. curl_setopt($curlObj, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
    55. curl_setopt($curlObj, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
    56. curl_setopt($curlObj, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
    57. curl_setopt($curlObj, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
    58. curl_setopt($curlObj, CURLOPT_HTTPHEADER, $header); //设置头部
    59. curl_setopt($curlObj, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
    60. $result = curl_exec($curlObj); // 执行操作
    61. if (curl_errno($curlObj)) {
    62. $result = 'error: ' . curl_error($curlObj);//捕抓异常
    63. }
    64. curl_close($curlObj); // 关闭CURL会话
    65. return $result; // 返回数据,json格式
    66. }
    67. }

    测试

    1. public function index()
    2. {
    3. $url = 'https://apis.map.qq.com/ws/place/v1/suggestion';
    4. $data = [
    5. 'key' => '',
    6. 'keyword' => ''
    7. ];
    8. $client = new CurlService();
    9. $result = $client->curl_http($url,false,$data);
    10. var_dump($result);exit;
    11. }

  • 相关阅读:
    【4】c++设计模式——>UML表示类之间的聚合关系
    JavaScript重新实现Git
    近代科学的诞生
    01- Java概述
    spring mvc源码分析之请求分发
    stm32超声波测距不准的解决方法(STM32 delay_us()产生1us)及stm32智能小车超声波测距代码(C语言版本)
    面试中的技术趋势:如何展示你跟进最新技术的能力
    【进阶玩法】策略+责任链+组合实现合同签章
    MongoDB的使用以及和python的交互
    【Netty 从成神到升仙系列 五】Netty 的责任链真有这么神奇吗?
  • 原文地址:https://blog.csdn.net/qq_41904362/article/details/133855024