用PHP封装强大且通用的cURL方法
/**
* @function 强大且通用的cURL请求库
* @param $url string 路径 如:https://example.com/a/b?key=val&k=>v
* @param $method string 请求方式 如:get、post、put、delete、patch、options
* @param $payload array|string 荷载 如:['foo' => 'bar', 'upload_file' => new CURLFile(file_path)]或json{"foo":"bar"}
* @param $request_header array 请求头 如:['Content-Type' => 'json', 'Set-Cookie' => 'foo']
* @param $time_out int 超时秒数 如:10,(单位:秒)
* @return array [bool 请求是否成功, string 错误内容, [int http状态码, array 响应头, string 响应主体内容]];
*/
function curl($url, $method = 'GET', $payload = [], $request_header = [], $time_out = 10) {
$curl = curl_init();
curl_setopt($curl,CURLOPT_URL, $url);
$method = strtoupper($method);
if ($method == 'POST') {
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
} else if ($method == 'PUT') {
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
} else if ($method == 'DELETE') {
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'DELETE');
curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
} else if ($method == 'PATCH') {
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PATCH');
curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
} else if ($method == 'OPTIONS') {
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'OPTIONS');
curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
} else if($method == 'HEAD') {
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'HEAD');
} else {
curl_setopt($curl, CURLOPT_HTTPGET, true);
}
if ((parse_url($url)['scheme'] ?? '') == 'https') {
//防止对12306类似的使用自家的ssl证书,造成的请求失败
//禁止验证对等证书
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
//禁止验证主机证书
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
}
if ($time_out) {
curl_setopt($curl, CURLOPT_TIMEOUT, $time_out);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $time_out);
}
if ($request_header) {
//追加请求头 配置curl内容
curl_setopt($curl, CURLOPT_HTTPHEADER, array_map(function ($key, $value) {return $key . ': ' . $value;}, array_keys($request_header), $request_header));
}
curl_setopt($curl, CURLOPT_HEADER, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLINFO_HEADER_OUT, true);
curl_setopt($curl, CURLOPT_VERBOSE, true);
$response = curl_exec($curl);
$header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
$http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$body = substr($response, $header_size);
$header_str = trim(substr($response, 0, $header_size));
$header = [];
if($header_str) {
$header_arr = explode("\r\n", $header_str);
foreach($header_arr as $every_header) {
$header_temp = explode(': ', $every_header, 2);
if(count($header_temp) == 2) {
$header[$header_temp[0]] = $header_temp[1];
}
}
}
if (curl_errno($curl)) {
return ['status' => false, 'msg' => curl_error($curl), 'data' => []];
}
curl_close($curl);
return ['status' => true, 'msg' => '', 'data' => ['http_code' => $http_code, 'body' => $body, 'header' => $header]];
}
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgbcakj
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13