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 前提条件: 安装docker 如果想安装docker请查阅:安装docker 环境准备:centos8 拉取centos镜像 [rootlvs docker]# docker pull centos:8 8: Pulling from library/centos a1d0c7532777: Pull complete Di…...

专访虚拟人科技:如何利用 3DCAT 实时云渲染打造元宇宙空间
自古以来,人们对理想世界的探索从未停止,而最近元宇宙的热潮加速了这一步伐,带来了许多新的应用。作为元宇宙的关键入口,虚拟现实(VR)将成为连接虚拟和现实的桥梁。苹果发布的VISION PRO头戴设备将人们对VR…...

第三章:人工智能深度学习教程-基础神经网络(第二节-ANN 和 BNN 的区别)
在本文中,我们将了解单层感知器及其使用 TensorFlow 库在Python中的实现。神经网络的工作方式与我们的生物神经元的工作方式相同。 生物神经元的结构 生物神经元具有三个基本功能 接收外部信号。 处理信号并增强是否需要发送信息。 将信号传递给目标细胞&#x…...

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

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

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

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

软考-高级-信息系统项目管理师教程 第四版【第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>&…...

蓝桥杯官网练习题(正则问题)
题目描述 考虑一种简单的正则表达式: 只由 x ( ) | 组成的正则表达式。 小明想求出这个正则表达式能接受的最长字符串的长度。 例如 ((xx|xxx)x|(x|xx))xx 能接受的最长字符串是: xxxxxx,长度是 6。 输入描述 一个由 x()| 组成的正则表…...

iOS使用NSURLSession实现后台上传
NSURLSession后台上传的基本逻辑是:首先创建一个后台模式的NSURLSessionConfiguration,然后通过这个configuration创建一个NSURLSession,接着是创建相关的NSURLSessionTask,最后就是处理相关的代理事件。 1、创建NSURLSession -…...

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

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

Java中数据结构(基本数据类型+引用数据类型)介绍+整理+例子+对比
一、Java数据类型分类 在Java中,数据类型可以分为两大类:内置数据类型(Primitive Data Types)和引用数据类型(Reference Data Types)。 **内置数据类型(Primitive Data Types)**是…...

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

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

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

Linux-bluetooth蓝牙
蓝牙配对和蓝牙连接 蓝牙配对是指在两个蓝牙设备之间建立一种安全的关系,以确保只有已经通过授权的设备才能进行通信。在蓝牙配对过程中,设备之间将共享一个加密密钥,用于保护数据传输的安全性。通常需要在设备上输入一个PIN码或者进行手动确…...

mediasoup webrtc音视频会议搭建
环境ubuntu22.10 nvm --version 0.33.11 node -v v16.20.2 npm -v 8.19.4 node-gyp -v v10.0.1 python3 --version Python 3.10.7 python with pip: sudo apt install python3-pip gcc&g version 12.2.0 (Ubuntu 12.2.0-3ubuntu1) Make 4.2.1 npm install mediasoup3 sudo …...

【操作系统】操作系统的大端模式和小端模式
什么是大端模式、小端模式? 所谓的大端模式,是指数据的低位保存在内存的高地址中,而数据的高位保存在内存的低地址中; 所谓的小端模式,是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地…...

Oracle(13)Maintaining Data Integrity
目录 一、基础知识 1、Data Integrity 数据库的完整性 2、Types of Constraints 约束类型 3、Constraint States 约束状态 4、Guidelines for Constraints 约束准则 二、基础操作 1、Enabling Constraints 启用约束 2、命令方式创建约束 3、修改表创建的约束 4、删除约…...

工程(十二)Ubuntu20.04LSD_SLAM运行
博主创建了一个科研互助群Q:772356582,欢迎大家加入讨论。这是一个科研互助群,主要围绕机器人,无人驾驶,无人机方面的感知定位,决策规划,以及论文发表经验,以方便大家很好很快的科研…...

跨境电商,用指纹浏览器还是VPS?有何区别?
目前做跨境电商的小伙伴基本都是选择vps或者指纹浏览器来防关联。不过随着指纹浏览器的普及,越来越多人选择使用指纹浏览器,还没了解过指纹浏览器的小伙伴可能还在犹豫,vps和指纹浏览器到底哪个更好呢? Vps就是一个虚拟服务器&…...

R语言piecewiseSEM结构方程模型在生态环境领域实践技术应用
结构方程模型(Sructural Equation Modeling,SEM)可分析系统内变量间的相互关系,并通过图形化方式清晰展示系统中多变量因果关系网,具有强大的数据分析功能和广泛的适用性,是近年来生态、进化、环境、地学、…...

一站式解决方案:体验亚马逊轻量服务器/VPS的顶级服务与灵活性
文章目录 一、什么是轻量级服务器/VPS 二、服务器创建步骤 三、服务器连接客户端(私钥登录) 四、使用服务器搭建博客网站 五、个人浅解及总结 一、什么是轻量级服务器/VPS 亚马逊推出的轻量级服务器/VPS:是一种基于云计算技术的虚拟服务器解决方案。它允许用户…...

pda条码二维码扫描数据采集安卓手持终端扫码热敏标签打印一体机
HT800新一代移动物联终端是深圳联强优创信息科技有限公司自主研发的基于Android11操作系统的高性能、高可靠的工业级手持数据终端,能与其它设备进行无线通讯,提供良好的操作界面,支持条码扫描、RFID读写(NFC)、GPS定位…...

白上这么多年班,才知道数据可视化这么简单
写编程整理数据、做数据可视化分析,不仅难度大、易僵化,还效率低,不能及时响应业务的数据分析需求。那怎么办?换个BI数据可视化工具,套用BI方案,数据分析模型、BI数据可视化分析报表都一应俱全,…...