🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
` ~~~ <?php // +---------------------------------------------------------------------- // | Created by PHPstorm: JRKAdmin框架 [ JRKAdmin ] // +---------------------------------------------------------------------- // | Copyright (c) 2019~2022 [LuckyHHY] All rights reserved. // +---------------------------------------------------------------------- // | SiteUrl: http://www.luckyhhy.cn // +---------------------------------------------------------------------- // | Author: LuckyHhy <jackhhy520@qq.com> // +---------------------------------------------------------------------- // | Date: 2020/3/19-10:05 // +---------------------------------------------------------------------- // | Description: // +---------------------------------------------------------------------- namespace Jrk; class Http { /** * @param $url * @param array $params * @param array $options * @return mixed|string * @author: LuckyHhy <jackhhy520@qq.com> * @date: 2020/3/19 * @name: post * @describe:发送一个POST请求 */ public static function post($url, $params = [], $options = []) { $req = self::sendRequest($url, $params, 'POST', $options); return $req['ret'] ? $req['msg'] : ''; } /** * @param $url * @param array $params * @param array $options * @return mixed|string * @author: LuckyHhy <jackhhy520@qq.com> * @date: 2020/3/19 * @name: get * @describe: 发送一个GET请求 */ public static function get($url, $params = [], $options = []) { $req = self::sendRequest($url, $params, 'GET', $options); return $req['ret'] ? $req['msg'] : ''; } /** * @param $url * @param array $params * @param string $method * @param array $options * @return array * @author: LuckyHhy <jackhhy520@qq.com> * @date: 2020/3/19 * @name: sendRequest * @describe: CURL发送Request请求,含POST和REQUEST */ public static function sendRequest($url, $params = [], $method = 'POST', $options = []) { $method = strtoupper($method); $protocol = substr($url, 0, 5); $query_string = is_array($params) ? http_build_query($params) : $params; $ch = curl_init(); $defaults = []; if ('GET' == $method) { $geturl = $query_string ? $url . (stripos($url, "?") !== false ? "&" : "?") . $query_string : $url; $defaults[CURLOPT_URL] = $geturl; } else { $defaults[CURLOPT_URL] = $url; if ($method == 'POST') { $defaults[CURLOPT_POST] = 1; } else { $defaults[CURLOPT_CUSTOMREQUEST] = $method; } $defaults[CURLOPT_POSTFIELDS] = $query_string; } $defaults[CURLOPT_HEADER] = false; $defaults[CURLOPT_USERAGENT] = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.98 Safari/537.36"; $defaults[CURLOPT_FOLLOWLOCATION] = true; $defaults[CURLOPT_RETURNTRANSFER] = true; $defaults[CURLOPT_CONNECTTIMEOUT] = 3; $defaults[CURLOPT_TIMEOUT] = 3; // disable 100-continue curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:')); if ('https' == $protocol) { $defaults[CURLOPT_SSL_VERIFYPEER] = false; $defaults[CURLOPT_SSL_VERIFYHOST] = false; } curl_setopt_array($ch, (array)$options + $defaults); $ret = curl_exec($ch); $err = curl_error($ch); if (false === $ret || !empty($err)) { $errno = curl_errno($ch); $info = curl_getinfo($ch); curl_close($ch); return [ 'ret' => false, 'errno' => $errno, 'msg' => $err, 'info' => $info, ]; } curl_close($ch); return [ 'ret' => true, 'msg' => $ret, ]; } /** * @param $url * @param array $params * @param string $method * @return bool * @author: LuckyHhy <jackhhy520@qq.com> * @date: 2020/3/19 * @name: sendAsyncRequest * @describe:异步发送一个请求 */ public static function sendAsyncRequest($url, $params = [], $method = 'POST') { $method = strtoupper($method); $method = $method == 'POST' ? 'POST' : 'GET'; //构造传递的参数 if (is_array($params)) { $post_params = []; foreach ($params as $k => &$v) { if (is_array($v)) { $v = implode(',', $v); } $post_params[] = $k . '=' . urlencode($v); } $post_string = implode('&', $post_params); } else { $post_string = $params; } $parts = parse_url($url); //构造查询的参数 if ($method == 'GET' && $post_string) { $parts['query'] = isset($parts['query']) ? $parts['query'] . '&' . $post_string : $post_string; $post_string = ''; } $parts['query'] = isset($parts['query']) && $parts['query'] ? '?' . $parts['query'] : ''; //发送socket请求,获得连接句柄 $fp = fsockopen($parts['host'], isset($parts['port']) ? $parts['port'] : 80, $errno, $errstr, 3); if (!$fp) { return false; } //设置超时时间 stream_set_timeout($fp, 3); $out = "{$method} {$parts['path']}{$parts['query']} HTTP/1.1\r\n"; $out .= "Host: {$parts['host']}\r\n"; $out .= "Content-Type: application/x-www-form-urlencoded\r\n"; $out .= "Content-Length: " . strlen($post_string) . "\r\n"; $out .= "Connection: Close\r\n\r\n"; if ($post_string !== '') { $out .= $post_string; } fwrite($fp, $out); //echo fread($fp, 1024); fclose($fp); return true; } /** * @param $file * @param bool $delaftersend * @param bool $exitaftersend * @author: LuckyHhy <jackhhy520@qq.com> * @date: 2020/3/19 * @name: sendToBrowser * @describe:发送文件到客户端 */ public static function sendToBrowser($file, $delaftersend = true, $exitaftersend = true) { if (file_exists($file) && is_readable($file)) { header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment;filename = ' . basename($file)); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check = 0, pre-check = 0'); header('Pragma: public'); header('Content-Length: ' . filesize($file)); ob_clean(); flush(); readfile($file); if ($delaftersend) { unlink($file); } if ($exitaftersend) { exit; } } } } ~~~ `