当前位置: 首页 > news >正文

PHP Curl请求封装

php 中curl请求模块封装

<?php
namespace App\Utils;/*** http 工具类* @author Administrator**/
class HttpUtils
{private static $_instance;private function __construct(){}public static function getInstance(){if( null == self::$_instance ){self::$_instance = new HttpUtils();}return self::$_instance;}/*** http curl 请求* @param unknown $remote* @param unknown $method* @param array $data* @param array $headers* @return string*/public function curl( $remote, $method = 'GET', $data = [], $headers = [], $format = 'STRING' ){if( !$remote  ){$arrMsg[ 'code' ] = 0;$arrMsg[ 'msg' ] = 'ERROR: undefined request url';return $arrMsg;}$ch = curl_init();curl_setopt( $ch, CURLOPT_URL, $remote );curl_setopt( $ch, CURLOPT_HEADER, false );curl_setopt( $ch, CURLOPT_TIMEOUT, 60 );curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, false );curl_setopt( $ch, CURLOPT_USERAGENT,  $this->_getAgent() );if( isset( $headers ) && !empty( $headers ) ){curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );}switch ( $method ){case 'GET':break;case 'PUT':curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, 'PUT' );switch ( $format ){case 'STRING':curl_setopt( $ch, CURLOPT_POSTFIELDS,  http_build_query( $data, '', '&' ) ); //设置请求体,提交数据包break;case 'JSON':curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode( $data ) ); //设置请求体,提交数据包break;}break;case 'POST':curl_setopt( $ch, CURLOPT_POST, 1 );switch ( $format ){case 'STRING':curl_setopt( $ch, CURLOPT_POSTFIELDS,  http_build_query( $data, '', '&' ) );break;case 'JSON':curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode( $data ) );break;}break;case 'DELETE':curl_setopt ( $ch, CURLOPT_NOSIGNAL, true );curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, 'DELETE' );break;}curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );$result = curl_exec( $ch );$error = curl_error( $ch );$curl_info = curl_getinfo( $ch );curl_close( $ch );if( isset( $error ) && strlen( $error ) > 0 ){//异常$arrMsg[ 'code' ] = 0;$arrMsg[ 'request' ] = $remote;$arrMsg[ 'msg' ] = ' Curl ERROR: curl error code is ' . $error;return $arrMsg;}if( 400 <= $curl_info[ 'http_code' ] ){//异常$arrMsg[ 'code' ] = 0;$arrMsg[ 'http_code' ] = $curl_info[ 'http_code' ];$arrMsg[ 'request' ] = $remote;$arrMsg[ 'errmsg' ] = $result;$arrMsg[ 'msg' ] = ' CURL ERROR: http response error ';return $arrMsg;}$arrMsg[ 'code' ] = $curl_info[ 'http_code' ];$arrMsg[ 'request' ] = $remote;$arrMsg[ 'data' ] = $result;$arrMsg[ 'msg' ] = 'REMOTE: http code ' . $curl_info[ 'http_code' ];return $arrMsg;}/*** 获取远程数据是否正常* @param unknown $remote* @return string*/public function curlGet( $remote, $headers = [], $proxy = false ){if( !$remote  ){$arrMsg[ 'code' ] = 0;$arrMsg[ 'msg' ] = 'ERROR: undefined request url';return $arrMsg;}$curl = curl_init();curl_setopt( $curl, CURLOPT_URL, $remote );curl_setopt( $curl, CURLOPT_HEADER, false );curl_setopt( $curl, CURLOPT_TIMEOUT, 75 );curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true );curl_setopt( $curl, CURLOPT_FOLLOWLOCATION, true );curl_setopt( $curl, CURLOPT_SSL_VERIFYPEER, false );curl_setopt( $curl, CURLOPT_SSL_VERIFYHOST, false );// 可配置随机取  USERAGENT$strUserAgent = $this->_getAgent();curl_setopt( $curl, CURLOPT_USERAGENT, $strUserAgent );curl_setopt( $curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1 ); if( !empty( $headers ) ){curl_setopt( $curl, CURLOPT_HTTPHEADER, $headers );}if( $proxy ){// 配置多代理模式, 可进行随机切换或者指定模式切换使用代理$arrAgentINfo = $this->_getProxy();curl_setopt( $curl, CURLOPT_HTTPPROXYTUNNEL, false );curl_setopt( $curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP );curl_setopt( $curl, CURLOPT_PROXYAUTH, CURLAUTH_BASIC );// 设置代理服务器curl_setopt( $curl, CURLOPT_PROXY, $arrAgentINfo[ 'server' ] );// 设置隧道验证信息curl_setopt( $curl, CURLOPT_PROXYUSERPWD, "{$arrAgentINfo['user']}:{$arrAgentINfo['passwd']}");}$iStart = microtime( true );try{$data = curl_exec( $curl );$error_code = curl_errno( $curl );$error_info = curl_error( $curl );$curl_info = curl_getinfo( $curl );curl_close( $curl );$iUserSec = sprintf( '%0.2f', microtime( true ) - $iStart );if( isset( $error_info ) && strlen( $error_info ) > 0 ){$arrMsg[ 'code' ]   = 0;$arrMsg[ 'curl_code' ]= $error_code;$arrMsg[ 'request' ]= $remote;$arrMsg[ 'msg' ]    = 'CURL ERROR: '. $error_info;$arrMsg[ 'time' ]   = $iUserSec;return $arrMsg;}$arrMsg[ 'code' ]   = $curl_info[ 'http_code' ];$arrMsg[ 'request' ] = $remote;$arrMsg[ 'data' ]   = $data;$arrMsg[ 'msg' ]    = 'REMOTE: http code ' . $curl_info[ 'http_code' ];$arrMsg[ 'time' ]   = $iUserSec;}catch ( \Exception $e ){$arrMsg[ 'code' ]   = 0;$arrMsg[ 'request' ] = $remote;$arrMsg[ 'msg' ]    = 'CURL ERROR: '. $e->getMessage();$arrMsg[ 'time' ]   = $iUserSec;}return $arrMsg;}/*** 模拟post提交* @param unknown $remoteUrl* @param unknown $data* @return boolean|string*/public function curlPost( $remoteUrl, $data, $headers = [], $format = 'STRING' ){if( !$remoteUrl || !$data || empty( $data ) ){return false;}$ch = curl_init();curl_setopt( $ch, CURLOPT_URL, $remoteUrl );curl_setopt( $ch, CURLOPT_POST, true );switch ( $format ){case 'STRING':curl_setopt( $ch, CURLOPT_POSTFIELDS,  http_build_query( $data, '', '&' ) );break;case 'JSON':curl_setopt( $ch, CURLOPT_POSTFIELDS, \GuzzleHttp\json_encode( $data ) );break;}curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, 20 );curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );curl_setopt( $ch, CURLOPT_TIMEOUT, 180 );if( !empty( $headers ) ){curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );}curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, false );$result = curl_exec( $ch );$error = curl_error( $ch );$curl_info = curl_getinfo( $ch );curl_close( $ch );if( isset( $error ) && strlen( $error ) > 0 ){//异常$arrMsg[ 'code' ] = 0;$arrMsg[ 'request' ] = $remoteUrl;$arrMsg[ 'msg' ] = ' Curl ERROR: curl error code is ' . $error;return $arrMsg;}if( 200 != $curl_info[ 'http_code' ] ){//异常$arrMsg[ 'code' ] = 0;$arrMsg[ 'http_code' ] = $curl_info[ 'http_code' ];$arrMsg[ 'request' ] = $remoteUrl;$arrMsg[ 'data' ] = $result;$arrMsg[ 'msg' ] = ' CURL ERROR: http response error ';return $arrMsg;}$arrMsg[ 'code' ] = $curl_info[ 'http_code' ];$arrMsg[ 'request' ] = $remoteUrl;$arrMsg[ 'data' ] = $result;$arrMsg[ 'msg' ] = 'REMOTE: http code ' . $curl_info[ 'http_code' ];return $arrMsg;}/*** 模拟post提交* @param unknown $remoteUrl* @param unknown $data* @return boolean|string*/public function curlPut( $remoteUrl, $data, $headers = [], $format = 'STRING' ){if( !$remoteUrl || !$data || empty( $data ) ){return false;}$ch = curl_init();curl_setopt( $ch, CURLOPT_URL, $remoteUrl );curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, 'PUT' );switch ( $format ){case 'STRING':curl_setopt( $ch, CURLOPT_POSTFIELDS,  http_build_query( $data, '', '&' ) );break;case 'JSON':curl_setopt( $ch, CURLOPT_POSTFIELDS, \GuzzleHttp\json_encode( $data ) );break;}curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, 0 );curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );curl_setopt( $ch, CURLOPT_TIMEOUT, 180 );curl_setopt( $ch, CURLOPT_USERAGENT,  $this->_getAgent() );if( !empty( $headers ) ){curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );}curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, false );$result = curl_exec( $ch );$error = curl_error( $ch );$curl_info = curl_getinfo( $ch );curl_close( $ch );if( isset( $error ) && strlen( $error ) > 0 ){//异常$arrMsg[ 'code' ] = 0;$arrMsg[ 'request' ] = $remoteUrl;$arrMsg[ 'msg' ] = ' Curl ERROR: curl error code is ' . $error;return $arrMsg;}if( 200 != $curl_info[ 'http_code' ] ){//异常$arrMsg[ 'code' ] = 0;$arrMsg[ 'http_code' ] = $curl_info[ 'http_code' ];$arrMsg[ 'request' ] = $remoteUrl;$arrMsg[ 'data' ] = $result;$arrMsg[ 'msg' ] = ' CURL ERROR: http response error ';return $arrMsg;}$arrMsg[ 'code' ] = $curl_info[ 'http_code' ];$arrMsg[ 'request' ] = $remoteUrl;$arrMsg[ 'data' ] = $result;$arrMsg[ 'msg' ] = 'REMOTE: http code ' . $curl_info[ 'http_code' ];return $arrMsg;}/*** 模拟post提交* @param unknown $remoteUrl* @param unknown $data* @return boolean|string*/public function curlDelete( $remoteUrl, $headers = [] ){if( !$remoteUrl ){return false;}$ch = curl_init();curl_setopt( $ch, CURLOPT_URL, $remoteUrl );curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );curl_setopt( $ch, CURLOPT_TIMEOUT, 60 );curl_setopt( $ch, CURLOPT_USERAGENT,  $this->_getAgent() );if( !empty( $headers ) ){curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );}curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, 'DELETE' );curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, false );$result = curl_exec( $ch );$error = curl_error( $ch );$curl_info = curl_getinfo( $ch );curl_close( $ch );if( isset( $error ) && strlen( $error ) > 0 ){//异常$arrMsg[ 'code' ] = 0;$arrMsg[ 'request' ] = $remoteUrl;$arrMsg[ 'msg' ] = ' Curl ERROR: curl error code is ' . $error;return $arrMsg;}if( 200 <= $curl_info[ 'http_code' ] && 400 > $curl_info[ 'http_code' ]){//异常$arrMsg[ 'code' ] = 0;$arrMsg[ 'http_code' ] = $curl_info[ 'http_code' ];$arrMsg[ 'request' ] = $remoteUrl;$arrMsg[ 'msg' ] = ' CURL ERROR: http response error ';return $arrMsg;}$arrMsg[ 'code' ] = $curl_info[ 'http_code' ];$arrMsg[ 'request' ] = $remoteUrl;$arrMsg[ 'data' ] = $result;$arrMsg[ 'msg' ] = 'REMOTE: http code ' . $curl_info[ 'http_code' ];return $arrMsg;}/*** 随机取 代理信息* @return unknown[]*/private function _getProxy(){$arrRet = array();$arrCacheProxy = config( 'agents.proxys' );$proxy = array_shift( $arrCacheProxy );$arrRet[ 'name' ]   = $proxy[ 'name' ];$arrRet[ 'server' ] = $proxy[ 'proxy' ] . ':' . $proxy[ 'port' ];if( isset( $proxy[ 'user' ] ) && $proxy[ 'user' ] ){$arrRet[ 'user' ] = $proxy[ 'user' ];}if( isset( $proxy[ 'passwd' ] ) && $proxy[ 'passwd' ] ){$arrRet[ 'passwd' ] = $proxy[ 'passwd' ];}return $arrRet;}/*** 随机获取 user-agent*/private function _getAgent(){$agent = config( 'agents.agents' );$iGNum = count( $agent );$iCurrent = rand( 0, intval( $iGNum - 1 ) );return $agent[$iCurrent];}/*** 模拟post提交* @param unknown $remoteUrl* @param unknown $data* @return boolean|string*/public function curlPostWithCookie( $remoteUrl, $data,$cookie, $headers = [], $format = 'STRING' ){if( !$remoteUrl || !$data || empty( $data ) ){return false;}$ch = curl_init();curl_setopt( $ch, CURLOPT_URL, $remoteUrl );curl_setopt( $ch, CURLOPT_POST, true );curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie ); //设置Cookie信息保存在指定的文件中switch ( $format ){case 'STRING':curl_setopt( $ch, CURLOPT_POSTFIELDS,  http_build_query( $data, '', '&' ) );break;case 'JSON':curl_setopt( $ch, CURLOPT_POSTFIELDS, \GuzzleHttp\json_encode( $data ) );break;}curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, 0 );curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );curl_setopt( $ch, CURLOPT_TIMEOUT, 240 );if( !empty( $headers ) ){curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );}curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, false );$result = curl_exec( $ch );$error = curl_error( $ch );$curl_info = curl_getinfo( $ch );curl_close( $ch );if( isset( $error ) && strlen( $error ) > 0 ){//异常$arrMsg[ 'code' ] = 0;$arrMsg[ 'request' ] = $remoteUrl;$arrMsg[ 'msg' ] = ' Curl ERROR: curl error code is ' . $error;return $arrMsg;}if( 200 != $curl_info[ 'http_code' ] ){//异常$arrMsg[ 'code' ] = 0;$arrMsg[ 'http_code' ] = $curl_info[ 'http_code' ];$arrMsg[ 'request' ] = $remoteUrl;$arrMsg[ 'data' ] = $result;$arrMsg[ 'msg' ] = ' CURL ERROR: http response error ';return $arrMsg;}$arrMsg[ 'code' ] = $curl_info[ 'http_code' ];$arrMsg[ 'request' ] = $remoteUrl;$arrMsg[ 'data' ] = $result;$arrMsg[ 'msg' ] = 'REMOTE: http code ' . $curl_info[ 'http_code' ];return $arrMsg;}/*** 获取链接详细信息* @author	 Administrator* @datetime 2019年5月7日  下午5:39:16* @comment	* * @param unknown $url* @return array|string[]|unknown[]|mixed[]*/public function curlGetHeader( $url ){$arrRet = array();if( !$url || strlen( $url ) <= 0 ){return $arrRet;}if( !starts_with( $url , [ 'http', 'https', 'Http', 'Https', 'HTTP', 'HTTPS' ] ) ){return $arrRet;}try{$header = get_headers( $url, TRUE );if ( strpos( $header[0], 302 ) || strpos( $header[0], 301 ) ){if( isset( $header[ 'Location' ] ) && is_array( $header[ 'Location' ] ) && !empty( $header[ 'Location' ] ) ) {$url = $header[ 'Location' ][count( $header['Location'] )-1 ];}else if( isset( $header[ 'Location' ] ) ){$url =  $header[ 'Location' ];}}$urlInfo = parse_url( $url );if( isset( $urlInfo ) && !empty( $urlInfo ) ){$scheme = strtolower( $urlInfo[ 'scheme' ] );$arrRet[ 'scheme' ] = $scheme;$arrRet[ 'host' ] = strtolower( $urlInfo[ 'host' ] );$arrRet[ 'url' ] = $scheme . '://' . $urlInfo[ 'host' ];}}catch( \Exception $e ){if( preg_match( "/ssl3_get_server_certificate/i" , $e->getMessage() ) ){return $this->curlGetHeader( str_replace( 'https://' , 'http://',  $url ) );}}return $arrRet;}
}

相关文章:

PHP Curl请求封装

php 中curl请求模块封装 <?php namespace App\Utils;/*** http 工具类* author Administrator**/ class HttpUtils {private static $_instance;private function __construct(){}public static function getInstance(){if( null self::$_instance ){self::$_instance n…...

java list set 特性

List的常用实现类 ArrayList (常用) JDK1.2 底层数组实现 查询快,增删慢 线程不安全,效率高 LinkedList JDK1.2 底层链表实现 查询慢,增删快 线程不安全,效率高 Vector JDK1.0 底层数组实现 都慢 线程安全,效率低 List 集合名new 实现类(); 常用方法 集合名.方法名(实参列表…...

Docker 用centos 编译安装apache

Docker 用centos 编译安装apache 前提条件&#xff1a; 安装docker 如果想安装docker请查阅&#xff1a;安装docker 环境准备&#xff1a;centos8 拉取centos镜像 [rootlvs docker]# docker pull centos:8 8: Pulling from library/centos a1d0c7532777: Pull complete Di…...

专访虚拟人科技:如何利用 3DCAT 实时云渲染打造元宇宙空间

自古以来&#xff0c;人们对理想世界的探索从未停止&#xff0c;而最近元宇宙的热潮加速了这一步伐&#xff0c;带来了许多新的应用。作为元宇宙的关键入口&#xff0c;虚拟现实&#xff08;VR&#xff09;将成为连接虚拟和现实的桥梁。苹果发布的VISION PRO头戴设备将人们对VR…...

第三章:人工智能深度学习教程-基础神经网络(第二节-ANN 和 BNN 的区别)

在本文中&#xff0c;我们将了解单层感知器及其使用 TensorFlow 库在Python中的实现。神经网络的工作方式与我们的生物神经元的工作方式相同。 生物神经元的结构 生物神经元具有三个基本功能 接收外部信号。 处理信号并增强是否需要发送信息。 将信号传递给目标细胞&#x…...

回归模型原理总结及代码实现

前言 本文将介绍回归模型算法&#xff0c;并总结了一些常用的除线性回归模型之外的模型&#xff0c;其中包括一些单模型及集成学习器。 保序回归、多项式回归、多输出回归、多输出K近邻回归、决策树回归、多输出决策树回归、AdaBoost回归、梯度提升决策树回归、人工神经网络、…...

游戏开发中的“御用中介“

点击上方亿元程序员关注和★星标 引言 大家好&#xff0c;我是亿元程序员&#xff0c;一位有着8年游戏行业经验的主程。 本系列是《和8年游戏主程一起学习设计模式》&#xff0c;让糟糕的代码在潜移默化中升华&#xff0c;欢迎大家关注分享收藏订阅。 游戏开发中的"御用…...

flink1.15报错 processElement_split

flink sql 完整报错 Caused by: java.lang.NullPointerExceptionat StreamExecCalc$1148.processElement_split178(Unknown Source) ~[?:?]at StreamExecCalc$1148.processElement(Unknown Source) ~[?:?]at org.apache.flink.streaming.runtime.tasks.CopyingChainingOutp…...

电脑投屏到TCL电视鼠标延迟

问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; 笔记本电脑使用HDMI投屏到TCL电视&#xff0c;页面显示正常但是鼠标延迟反应太慢了 解决方案&#xff1a; 提示&#xff1a;这里填写该问题的具体解决方案&#xff1a; TCL电视设置中选择图像 → 图像类型改…...

220v插座led指示灯维修

由于220v是交流电&#xff0c;有反向电压的情况&#xff0c;而led反向通电的时候电阻无穷大&#xff0c;所以分压也无穷大&#xff0c;220v一导通就击穿&#xff0c;即使加了很大的电阻也没用&#xff0c;串联电阻只能作用于二极管正向的时候。 目前有两种方案&#xff1a; 方…...

​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​

软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】 课本里章节里所有蓝色字体的思维导图...

javascript自定义事件的观察者模式写法和用法以及继承

<html><head><meta http-equiv"Context-Type:text/html;charsetutf-8"/><title>自定义事件之观察者模式</title><script type"text/javascript" src"common.js"></script></head><body>&…...

蓝桥杯官网练习题(正则问题)

题目描述 考虑一种简单的正则表达式&#xff1a; 只由 x ( ) | 组成的正则表达式。 小明想求出这个正则表达式能接受的最长字符串的长度。 例如 ((xx|xxx)x|(x|xx))xx 能接受的最长字符串是&#xff1a; xxxxxx&#xff0c;长度是 6。 输入描述 一个由 x()| 组成的正则表…...

iOS使用NSURLSession实现后台上传

NSURLSession后台上传的基本逻辑是&#xff1a;首先创建一个后台模式的NSURLSessionConfiguration&#xff0c;然后通过这个configuration创建一个NSURLSession&#xff0c;接着是创建相关的NSURLSessionTask&#xff0c;最后就是处理相关的代理事件。 1、创建NSURLSession -…...

linux之信号

Linux之信号 什么是信号信号的产生方式signalsignactionkill信号集信号屏蔽 什么是信号 信号机制是一种使用信号来进行进程之间传递消息的方法&#xff0c;信号的全称为软中断信号&#xff0c;简称软中断。 信号的本质是软件层次上对中断的一种模拟&#xff08;软中断&#xff…...

golang工程中间件——redis常用结构及应用(string, hash, list)

Redis 命令中心 【golang工程中间件——redisxxxxx】这些篇文章专门以应用为主&#xff0c;原理性的后续博主复习到的时候再详细阐述 string结构以及应用 字符数组&#xff0c;redis字符串是二进制安全字符串&#xff0c;可以存储图片等二进制数据&#xff0c;同时也可以存…...

Java中数据结构(基本数据类型+引用数据类型)介绍+整理+例子+对比

一、Java数据类型分类 在Java中&#xff0c;数据类型可以分为两大类&#xff1a;内置数据类型&#xff08;Primitive Data Types&#xff09;和引用数据类型&#xff08;Reference Data Types&#xff09;。 **内置数据类型&#xff08;Primitive Data Types&#xff09;**是…...

SpringSecurity原理

Spring Security是Spring框架中的一个安全性框架&#xff0c;用于保护Web应用程序。以下是Spring Security的工作原理&#xff1a; 1.认证 认证是指验证用户身份。Spring Security使用过滤器链来拦截用户的请求。在对请求进行处理之前&#xff0c;它需要对用户进行认证。Spri…...

云表平台突破传统,企业级低代码让软件开发速度提升

随着数字化进程的加速推进&#xff0c;软件开发效率和成本的要求也在日益提高。在这个背景下&#xff0c;低代码技术的出现为企业软件开发提供了新的解决方案。低代码开发平台以其简单易用、高效灵活的特点&#xff0c;已经成为各行各业企业进行应用开发的首选工具。 企业中低代…...

三数之和(双指针)

15. 三数之和 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...

Vue 3 + WebSocket 实战:公司通知实时推送功能详解

&#x1f4e2; Vue 3 WebSocket 实战&#xff1a;公司通知实时推送功能详解 &#x1f4cc; 收藏 点赞 关注&#xff0c;项目中要用到推送功能时就不怕找不到了&#xff01; 实时通知是企业系统中常见的功能&#xff0c;比如&#xff1a;管理员发布通知后&#xff0c;所有用户…...

UE5 音效系统

一.音效管理 音乐一般都是WAV,创建一个背景音乐类SoudClass,一个音效类SoundClass。所有的音乐都分为这两个类。再创建一个总音乐类&#xff0c;将上述两个作为它的子类。 接着我们创建一个音乐混合类SoundMix&#xff0c;将上述三个类翻入其中&#xff0c;通过它管理每个音乐…...

【记录坑点问题】IDEA运行:maven-resources-production:XX: OOM: Java heap space

问题&#xff1a;IDEA出现maven-resources-production:operation-service: java.lang.OutOfMemoryError: Java heap space 解决方案&#xff1a;将编译的堆内存增加一点 位置&#xff1a;设置setting-》构建菜单build-》编译器Complier...