当前位置: 首页 > 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 且不重复的三…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...