翼度科技»论坛 编程开发 PHP 查看内容

用PHP封装一个强大且通用的cURL方法

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
用PHP封装一个强大且通用的cURL方法。
用PHP封装一个强大且通用的cURL方法。
用PHP封装一个强大且通用的cURL方法。
用PHP封装一个强大且通用的cURL方法。
  1. /**
  2. * @function 强大且通用的cURL请求库
  3. * @param    $url            string        路径       如:https://example.com/a/b?key=val&k=>v
  4. * @param    $method         string        请求方式   如:get、post、put、delete、patch、options
  5. * @param    $payload        array|string  荷载       如:['foo' => 'bar', 'upload_file' => new CURLFile(file_path)]或json{"foo":"bar"}
  6. * @param    $request_header array         请求头     如:['Content-Type' => 'json', 'Set-Cookie' => 'foo']
  7. * @param    $time_out       int           超时秒数   如:10,(单位:秒)
  8. * @return   array [bool 请求是否成功, string 错误内容, [int http状态码, array 响应头, string 响应主体内容]];
  9. */
  10. function curl($url, $method = 'GET', $payload = [], $request_header = [], $time_out = 10) {
  11.     $curl = curl_init();
  12.     curl_setopt($curl,CURLOPT_URL, $url);
  13.     $method = strtoupper($method);
  14.     if ($method == 'POST') {
  15.         curl_setopt($curl, CURLOPT_POST, true);
  16.         curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
  17.     } else if ($method == 'PUT') {
  18.         curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PUT');
  19.         curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
  20.     } else if ($method == 'DELETE') {
  21.         curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'DELETE');
  22.         curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
  23.     } else if ($method == 'PATCH') {
  24.         curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PATCH');
  25.         curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
  26.     } else if ($method == 'OPTIONS') {
  27.         curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'OPTIONS');
  28.         curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
  29.     } else if($method == 'HEAD') {
  30.         curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'HEAD');
  31.     } else {
  32.         curl_setopt($curl, CURLOPT_HTTPGET, true);
  33.     }
  34.     if ((parse_url($url)['scheme'] ?? '') == 'https') {
  35.         //防止对12306类似的使用自家的ssl证书,造成的请求失败
  36.         //禁止验证对等证书
  37.         curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
  38.         //禁止验证主机证书
  39.         curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
  40.     }
  41.     if ($time_out) {
  42.         curl_setopt($curl, CURLOPT_TIMEOUT, $time_out);
  43.         curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $time_out);
  44.     }
  45.     if ($request_header) {
  46.         //追加请求头 配置curl内容
  47.         curl_setopt($curl, CURLOPT_HTTPHEADER, array_map(function ($key, $value) {return $key . ': ' . $value;}, array_keys($request_header), $request_header));
  48.     }
  49.     curl_setopt($curl, CURLOPT_HEADER, true);
  50.     curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  51.     curl_setopt($curl, CURLINFO_HEADER_OUT, true);
  52.     curl_setopt($curl, CURLOPT_VERBOSE, true);
  53.     $response    = curl_exec($curl);
  54.     $header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
  55.     $http_code   = curl_getinfo($curl, CURLINFO_HTTP_CODE);
  56.     $body        = substr($response, $header_size);
  57.     $header_str  = trim(substr($response, 0, $header_size));
  58.     $header = [];
  59.     if($header_str) {
  60.         $header_arr  = explode("\r\n", $header_str);
  61.         foreach($header_arr as $every_header) {
  62.             $header_temp = explode(': ', $every_header, 2);
  63.             if(count($header_temp) == 2) {
  64.                 $header[$header_temp[0]] = $header_temp[1];
  65.             }
  66.         }
  67.     }
  68.     if (curl_errno($curl)) {
  69.         return ['status' => false, 'msg'  => curl_error($curl), 'data' => []];
  70.     }
  71.     curl_close($curl);
  72.     return ['status' => true, 'msg'  => '', 'data' => ['http_code' => $http_code, 'body' => $body, 'header' => $header]];
  73. }
复制代码
来源:https://www.cnblogs.com/phpphp/p/17616492.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具