CRMEB 项目中的 Guzzle HTTP Client(v3)深度使用指南:客户端、请求选项与并行发送
后端电商前端【免费下载链接】CRMEBCRMEB开源商城免费开源多语言商城系统Tp6框架商城系统可商用包含小程序商城、H5商城、公众号商城、PC商城、App支持分销、拼团、砍价、秒杀、优惠券、积分、会员等级、小程序直播、页面DIY前后端分离方便二开更有详细使用文档、接口文档、数据字典、二开文档/视频教程欢迎大家提出宝贵意见和建议项目地址https://gitcode.com/gh_mirrors/cr/CRMEB点击查看免费下载本指南以 Guzzle v3guzzle/guzzle 3.9.3官方文档为骨架完整讲解 HTTP 客户端的三大核心组成Client / Request / Response、Base URL 合并规则、全部请求选项Request Options以及并行请求与插件事件机制并结合 CRMEB 商城源码展示它在对象存储上传、第三方云 SDK 依赖中的真实应用场景。读完本文你将能熟练使用 Guzzle v3 构造任意 HTTP 请求、配置认证与代理、控制超时与 SSL 校验并理解它在 CRMEB 项目中的落地位置。一、Guzzle HTTP Client 是什么三大核心部件Guzzle 让 PHP 开发者能够完全掌控 HTTP 请求同时遵循 HTTP/1.1 的最佳实践。它的 HTTP 功能是构建在 PHP libcurl 绑定之上的健壮框架。其核心由三部分组成对应文档 crmeb/vendor/guzzle/guzzle/docs/http-client/client.rst组成类职责ClientsGuzzle\Http\Client创建并发送请求将响应关联到请求上RequestsGuzzle\Http\Message\Request无请求体的请求RequestsGuzzle\Http\Message\EntityEnclosingRequest携带请求体的请求ResponsesGuzzle\Http\Message\Response服务端返回的响应对象Client 对象负责三件事创建请求、发送请求、把响应设置到请求对象上。所有请求都由请求工厂Guzzle\Http\Message\RequestFactoryInterface创建默认工厂通常够用你也可以通过$client-setRequestFactory()注入自定义工厂。二、创建客户端与 Base URL 合并规则2.1 基本用法实例化 Client 时可以传入一个可选的 base URL本质是一个 URI 模板和一个可选配置数组。使用相对 URL 创建请求时base URL 会自动与请求 URL 合并use Guzzle\Http\Client; // 创建客户端并提供 base URL $client new Client(https://api.github.com); $request $client-get(/user); $request-setAuth(user, pass); echo $request-getUrl(); // https://api.github.com/user // 必须显式发送请求才会真正发起传输 $response $request-send(); echo $response-getBody(); // {type:User, ... echo $response-getHeader(Content-Length); // 792 $data $response-json(); echo $data[type]; // User2.2 Base URL 与相对 URL 的合并规则Guzzle 遵循 RFC 3986 的 5.2 节来合并 base URL 与相对 URL。注意上文例子中传给get()的是/user带前导斜杠它是绝对路径形式的相对 URL因此合并后实际得到https://api.github.com/user。具体规则如下绝对路径带前导斜杠如/path/to/something会覆盖 base URL 中的既有路径同时相对 URL 携带的查询字符串会替换 base URL 的查询字符串。相对路径不带前导斜杠会追加到 base URL 路径之后。例如 base URL 为https://api.twitter.com/v1.1用statuses/user_timeline.json创建 GET 请求得到https://api.twitter.com/v1.1/statuses/user_timeline.json。如果同时提供了查询字符串则相对路径追加到 base URL 路径查询参数合并进 base URL 的查询字符串。绝对 URL如http://httpbin.org/ip请求完全按该 URL 原样发送base URL 的任何组成部分都不会参与合并。从源码看Client 内部将 baseUrl 解析为Guzzle\Http\Url对象在 Client.php 的createRequest()中完成合并逻辑你可以直接在源码中验证上述三种合并分支。三、客户端配置选项Configuration Options构造函数第二个参数是配置数组可以包含 URI 模板变量或改变客户端行为的特殊选项配置项说明request.options关联数组作为每个请求的默认 Request options作用于客户端创建的所有请求redirect.disable禁用客户端创建的每个请求的 HTTP 重定向跟随curl.options关联数组作为每个请求的 cURL 选项若某项的键或值是字符串Guzzle 会自动匹配对应的 cURL 常量如字符串CURLOPT_PROXY会被转换为常量CURLOPT_PROXYssl.certificate_authority值为true时使用 Guzzle 内置的 SSL 证书包默认行为system使用系统证书包字符串指向某个证书文件字符串指向某目录则使用其中多个证书false则关闭 SSL 校验不推荐。当 Guzzle 运行在 phar 中时内置证书会被解压到系统临时目录每次创建客户端都会做 MD5 完整性校验command.params使用Guzzle\Service\Client时作为每个命令默认选项的关联数组3.1 综合配置示例下面的示例设置了默认请求头、默认查询参数、默认认证方案和默认代理。配置数组中的变量还可以注入到 base URL 中即 URI 模板use Guzzle\Http\Client; $client new Client(https://api.twitter.com/{version}, array( version v1.1, request.options array( headers array(Foo Bar), query array(testing 123), auth array(username, password, Basic|Digest|NTLM|Any), proxy tcp://localhost:80 ) ));3.2 自定义 User-Agent默认 User-Agent 格式为Guzzle/Guzzle_Version curl/curl_version PHP/PHP_VERSION可通过setUserAgent()定制// 完全覆盖默认 User-Agent $client-setUserAgent(Test/123); // 在默认 User-Agent 前追加字符串 $client-setUserAgent(Test/123, true);该方法的签名在 Client.php 中为setUserAgent($userAgent, $includeDefault false)第二个参数控制是否保留默认串。四、使用客户端创建各类请求Client 暴露了多种创建 Request 对象的方法$client-createRequest($method, $uri, array $headers, $body, $options)— 创建任意自定义 HTTP 请求$client-get($uri, array $headers, $options)— 创建 GET 请求$client-head($uri, array $headers, $options)— 创建 HEAD 请求$client-delete($uri, array $headers, $body, $options)— 创建 DELETE 请求$client-post($uri, array $headers, $postBody, $options)— 创建 POST 请求$client-put($uri, array $headers, $body, $options)— 创建 PUT 请求$client-patch($uri, array $headers, $body, $options)— 创建 PATCH 请求use Guzzle\Http\Client; $client new Client(http://baseurl.com/api/v1); // 相对 URL相对路径追加到 base URL 路径 // 最终 URL: http://baseurl.com/api/v1/path?query123valueabc $request $client-get(path?query123valueabc); $response $request-send(); // 带绝对路径的相对 URL覆盖 base URL 的路径部分 // 最终 URL: http://baseurl.com/path?query123valueabc $request $client-head(/path?query123valueabc); $response $request-send(); // 绝对 URL完全按原样发送 $request $client-delete(http://www.example.com/path?query123valueabc); $response $request-send(); // PUT以 PHP 流的内容作为请求体并指定自定义请求头 $request $client-put(http://www.example.com/upload, array( X-Header My Header ), fopen(http://www.test.com/, r)); $response $request-send(); // POST手动追加文件 $request $client-post(http://localhost:8983/solr/update) -addPostFiles(array(file /path/to/documents.xml)); $response $request-send(); // 探测资源是否允许 DELETE 方法 $supportsDelete $client-options(/path)-send()-isMethodAllowed(DELETE);这些便捷方法在 Client.php 中均有对应实现内部统一调用createRequest()。五、静态客户端StaticClientGuzzle 还提供了静态门面可以更方便地发送简单 HTTP 请求无需实例化客户端// 挂载静态客户端之后即可通过 \Guzzle 访问 Guzzle\Http\StaticClient::mount(); $response Guzzle::get(http://guzzlephp.org);静态客户端的每个请求方法get()、post()、put()等都接受一个请求选项关联数组$response Guzzle::post(http://test.com, array( headers array(X-Foo Bar), body array(Test 123), timeout 10 ));从 StaticClient.php 源码看mount($className Guzzle, ClientInterface $client null)通过class_alias注册别名request()内部惰性创建new Client()并调用createRequest($method, $url, null, null, $options)。六、请求选项Request Options全解析请求选项可以在创建请求时指定也可以在客户端的request.options中配置为默认值。它可以控制请求头、查询字符串、响应下载位置、代理、认证等各个方面。6.1 headers应用到请求的请求头关联数组。当在创建方法的$options参数中指定时$options中的 headers 会覆盖$headers参数中同名的头部$request $client-get($url, array(), array( headers array(X-Foo Bar) ));也可以在客户端上配置默认请求头$client new Guzzle\Http\Client(); // 用路径语法设置单个请求头 $client-setDefaultOption(headers/X-Foo, Bar); // 设置全部请求头 $client-setDefaultOption(headers, array(X-Foo Bar));此外任何客户端默认请求选项都可以通过配置对象设置$client-getConfig()-setPath(request.options/headers/X-Foo, Bar);6.2 query请求的查询字符串参数关联数组。在$options中指定时会覆盖$url中的同名查询参数$request $client-get($url, array(), array( query array(abc 123) ));也可在客户端上配置默认查询参数$client new Guzzle\Http\Client(); // 路径语法设置单个查询参数 $client-setDefaultOption(query/abc, 123); // 设置一组默认查询参数 $client-setDefaultOption(query, array(abc 123));6.3 body设置请求体。body选项的值可以是Guzzle\Http\EntityBodyInterface、字符串、fopen资源或发送 POST 时的数组。一旦指定body选项它会覆盖创建方法中的$body参数。6.4 auth指定 HTTP 认证参数的数组。数组第 0 位是用户名第 1 位是密码第 2 位可选认证类型。可选类型为Basic默认、Digest、NTLM、Any$request $client-get($url, array(), array( auth array(username, password, Digest) )); // 让客户端每个请求都携带认证头 $client-setDefaultOption(auth, array(username, password, Digest));6.5 cookies指定要添加到请求中的 cookie 关联数组。6.6 allow_redirects指定请求是否跟随重定向。默认跟随设为false则禁用等价于配置项redirect.disable内部对应Guzzle\Http\RedirectPlugin::DISABLE常量。6.7 save_to指定响应体下载到何处可以传文件路径、fopen资源或Guzzle\Http\EntityBodyInterface对象。6.8 eventsevents选项让挂载事件监听器变得简单它必须是事件名 → Closure或包含 Closure 与优先级的数组的关联数组$request $client-get($url, array(), array( events array( request.before_send function (\Guzzle\Common\Event $e) { echo About to send . $e[request]; } ) )); // 静态客户端用法 Guzzle::get($url, array( events array( request.before_send function (\Guzzle\Common\Event $e) { echo About to send . $e[request]; } ) ));6.9 pluginsplugins选项让你为请求挂载一组插件Guzzle::get($url, array( plugins array( new Guzzle\Plugin\Cache\CachePlugin(), new Guzzle\Plugin\Cookie\CookiePlugin() ) ));6.10 exceptionsexceptions选项用于在非成功的 HTTP 响应码如 404、500 等下禁用异常抛出。设为false则不抛异常。6.11 paramsparams选项用于向请求添加数据参数关联数组。注意这不是查询字符串参数。6.12 timeout / connect_timeouttimeout整个传输允许的最长秒数超时即中断。connect_timeout连接等待的最长秒数。两者设为0表示无限期等待。$request $client-get(http://www.example.com, array(), array( timeout 20, connect_timeout 1.5 ));6.13 verifytrue启用 SSL 证书校验默认false禁用或者传入 CA bundle 路径使用自定义证书进行校验。6.14 certcert指定 PEM 格式的 SSL 客户端证书用于要求双向认证的服务器。如果证书需要密码用数组且密码作为第二个元素。通常与ssl_key配合使用$request $client-get(https://www.example.com, array(), array( cert /etc/pki/client_certificate.pem )); $request $client-get(https://www.example.com, array(), array( cert array(/etc/pki/client_certificate.pem, s3cr3tp455w0rd) ));6.15 ssl_keyssl_key指定 PEM 格式私钥文件可带密码保护。密码属于敏感信息请妥善保管包含它的 PHP 脚本。通常与cert配合使用$request $client-get(https://www.example.com, array(), array( ssl_key /etc/pki/private_key.pem )); $request $client-get(https://www.example.com, array(), array( ssl_key array(/etc/pki/private_key.pem, s3cr3tp455w0rd) ));6.16 proxyproxy用于指定 HTTP 代理格式如http://username:password192.168.16.1:10。6.17 debugdebug用于显示一次传输的详细 cURL 输出。6.18 stream使用静态客户端时stream设为true会返回一个Guzzle\Stream\Stream对象可以按需从流中拉取数据而不是让 cURL 一次性把整个响应下载到内存$stream Guzzle::get(http://guzzlephp.org, array(stream true)); while (!$stream-feof()) { echo $stream-readLine(); }七、发送请求串行与并行7.1 send() 发送单个请求请求可以通过 Request 对象的send()发送也可以通过 Client 的send()发送$request $client-get(http://www.amazon.com); $response $client-send($request);7.2 并行发送Parallel RequestsClient 的send()既可以接受单个Guzzle\Http\Message\RequestInterface对象也可以接受一个 RequestInterface 对象数组——传入数组时请求将被并行发送。串行发送大量 HTTP 请求会因前一个请求必须完成后才能发起下一个而造成脚本无谓的延迟并行发送则让整个请求池以其中最慢请求的速度完成大幅缩短多个 HTTP 请求的总耗时。Guzzle 对 PHP 的 curl_multi 函数提供了封装。并行发送三个请求的示例use Guzzle\Common\Exception\MultiTransferException; try { $responses $client-send(array( $client-get(http://www.google.com/), $client-head(http://www.google.com/), $client-get(https://www.github.com/) )); } catch (MultiTransferException $e) { echo The following exceptions were encountered:\n; foreach ($e as $exception) { echo $exception-getMessage() . \n; } echo The following requests failed:\n; foreach ($e-getFailedRequests() as $request) { echo $request . \n\n; } echo The following requests succeeded:\n; foreach ($e-getSuccessfulRequests() as $request) { echo $request . \n\n; } }成功时返回一组Guzzle\Http\Message\Response对象。单个请求失败不会导致整个请求池失败——传输过程中抛出的所有异常会被聚合成Guzzle\Common\Exception\MultiTransferException。对应实现为 Client.php 的sendMultiple()其内部使用CurlMultiProxy默认 MAX_HANDLES 3即最多同时打开 3 个 cURL 句柄。八、插件与事件系统Guzzle 提供了易用的请求插件通过基于 Symfony2 Event Dispatcher 的信号槽事件通知为请求添加行为。任何挂载到 Client 对象上的事件监听器或订阅者都会自动挂载到该客户端创建的每一个请求上。8.1 让每个请求共享同一 cookie 会话将Guzzle\Plugin\Cookie\CookiePlugin挂到客户端即可让该客户端创建的每个请求都支持 cookie且共用同一个 cookie 会话use Guzzle\Plugin\Cookie\CookiePlugin; use Guzzle\Plugin\Cookie\CookieJar\ArrayCookieJar; // 创建 cookie 插件 $cookiePlugin new CookiePlugin(new ArrayCookieJar()); // 将插件作为订阅者挂到客户端 $client-addSubscriber($cookiePlugin);8.2 客户端发出的事件Guzzle\Http\Client对象发出如下事件事件名说明事件数据client.create_request客户端创建请求时触发client客户端对象request已创建的请求use Guzzle\Common\Event; use Guzzle\Http\Client; $client new Client(); // 监听请求创建打印出来 $client-getEventDispatcher()-addListener(client.create_request, function (Event $e) { echo Client object: . spl_object_hash($e[client]) . \n; echo Request object: {$e[request]}\n; });九、CRMEB 项目中的真实落地9.1 Guzzle v3 的引入来源CRMEB 的 crmeb/composer.lock 中锁定了guzzle/guzzlev3.9.3它并非由 CRMEB 直接声明而是由腾讯云对象存储 SDKqcloud/cos-sdk-v5间接依赖requireguzzle/guzzle: ~3.7带入的。此外 crmeb/composer.json 还直接声明了guzzlehttp/guzzle: 6.5.5与guzzlehttp/psr7: ^1.7因此 CRMEB 中同时存在 v3 与 v6 两代 Guzzle 代码路径属于依赖生态的典型叠加。9.2 EntityBody 在文件流上传中的使用文档提到的Guzzle\Http\EntityBodyInterface在 CRMEB 上传组件中有直接应用。以阿里云 OSS 存储实现 crmeb/crmeb/services/upload/storage/Oss.php 为例stream()方法在上传前把文件内容包装为 Guzzle 的 EntityBodyuse Guzzle\Http\EntityBody; // ... $fileContent (string)EntityBody::factory($fileContent); $uploadInfo $this-app()-putObject($this-storageName, $key, $fileContent);同样地京东云存储 crmeb/crmeb/services/upload/storage/Jdoss.php 也通过EntityBody::factory()将上传内容转换为统一实体对应文档中body选项支持Guzzle\Http\EntityBodyInterface值的说明。9.3 与 Guzzle v6 / PSR-7 的共存CRMEB 的云存储模块在另一些实现中则使用新一代 PSR-7 工具类腾讯云 COSCos.php、华为云 OBSObs.php、火山引擎 TOSTyoss.php都use GuzzleHttp\Psr7\Utils;微信 OAuth 服务WechatOauth.php也使用GuzzleHttp\Psr7\Uri处理 URI。这两套命名空间可以共存正是 Guzzle 三代架构设计v3 基于Guzzle\Http\*自定义消息体系、v6 起全面拥抱 PSR-7在真实项目中的体现。9.4 对照CRMEB 自研的 curl 封装值得注意的是CRMEB 核心业务代码并未直接依赖 Guzzle 发送常规 HTTP 请求而是封装了自己的 crmeb/crmeb/services/HttpService.php基于原生 curl提供getRequest()、postRequest()、request()等静态方法并统一处理超时、HTTPS 证书校验、header 输出与http_code判定。这也解释了 Guzzle 在 CRMEB 中主要作为第三方云 SDK 的传输层依赖而非项目自有 HTTP 客户端的定位——你可以对照本文的timeout/verify/proxy等选项理解这些概念在 curl 参数CURLOPT_TIMEOUT、CURLOPT_SSL_VERIFYPEER等中的等价映射。十、小结与注意事项Guzzle v3 的核心工作流是创建 Client → 用便捷方法创建 Request →send()发送 → 解析 ResponseBase URL 合并遵循 RFC 3986三类 URL 形态绝对路径 / 相对路径 / 绝对 URL的合并行为截然不同务必区分。客户端配置request.options、curl.options、ssl.certificate_authority等与单次请求选项headers、query、auth、timeout、verify、proxy等是两套机制前者作用于所有请求后者单次覆盖。需要同时请求多个资源时优先使用send(array(...))并行模式失败请求通过MultiTransferException::getFailedRequests()与getSuccessfulRequests()分别处理。在 CRMEB 仓库中Guzzle v3 由qcloud/cos-sdk-v5间接引入guzzle/guzzle ~3.7锁版本为 v3.9.3其EntityBody被用于 OSS / 京东云文件流上传若需在项目内直接使用 Guzzle 发送请求请确认引入路径与版本命名空间Guzzle\Http\*为 v3GuzzleHttp\*为 v6避免混用导致类加载错误。赞分享后端电商前端【免费下载链接】CRMEBCRMEB开源商城免费开源多语言商城系统Tp6框架商城系统可商用包含小程序商城、H5商城、公众号商城、PC商城、App支持分销、拼团、砍价、秒杀、优惠券、积分、会员等级、小程序直播、页面DIY前后端分离方便二开更有详细使用文档、接口文档、数据字典、二开文档/视频教程欢迎大家提出宝贵意见和建议项目地址https://gitcode.com/gh_mirrors/cr/CRMEB点击查看免费下载相关推荐Guzzle HTTP 客户端请求选项详解Guzzle HTTP 客户端请求选项详解 概述 Guzzle 是一个功能强大的 PHP HTTP 客户端它提供了丰富的请求选项 Request Option后端vue-resource与GraphQL使用HTTP客户端发送GraphQL请求vue resource与GraphQL使用HTTP客户端发送GraphQL请求 在现代前端开发中高效的数据获取是构建优秀用户体验的关键。你是否还在为RES前端Guzzle HTTP客户端PHP开发者必备的HTTP请求工具Guzzle HTTP客户端PHP开发者必备的HTTP请求工具 什么是Guzzle Guzzle是一个功能强大的PHP HTTP客户端库它极大地简化了发送后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

2026年新手必看:OpenClaw(Clawdbot)部署阿里云的保姆级教程(TaoToken 统一 Key 接入版)

2026年新手必看:OpenClaw(Clawdbot)部署阿里云的保姆级教程(TaoToken 统一 Key 接入版)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 15:53:08 阅读更多 →
蜂鸣器播放小星星:单片机定时器与方波驱动的实战解析

蜂鸣器播放小星星:单片机定时器与方波驱动的实战解析

简介:面向51单片机爱好者和嵌入式初学者的蜂鸣器音乐播放实验工程,以STC89C516单片机为控制核心,通过定时器产生脉宽调制信号,驱动蜂鸣器演奏《小星星》旋律,可帮助理解数字硬件控制音频输出的基本原理。压缩包共收录文…

2026/10/15 15:53:08 阅读更多 →
魔兽世界金团表格协同插件BiaoGe技术解析

魔兽世界金团表格协同插件BiaoGe技术解析

简介:本资源是专为《魔兽世界》WLK(巫妖王之怒)版本玩家设计的大脚金团表格插件,面向金团团长及团队副本活跃玩家,解决传统金团中装备竞拍流程繁琐、金币统计易出错、分配不透明等核心管理难题。插件共154个文件&#…

2026/10/15 15:53:08 阅读更多 →

最新新闻

STM32H723外挂W25Q128:Keil FLM烧录算法编写与避坑指南

STM32H723外挂W25Q128:Keil FLM烧录算法编写与避坑指南

简介:面向STM32嵌入式开发人员,这份资料提供STM32H723ZET6微控制器与W25Q128闪存搭配使用的Keil烧录算法FLM源码,解决通过Keil IDE对目标芯片进行程序下载、擦除与调试时缺少匹配算法的问题。资源包共1566个文件,大小14.41MB&…

2026/10/15 16:44:52 阅读更多 →
TMS320F28027例程实战:从CCS环境到GPIO/ADC/PWM外设开发

TMS320F28027例程实战:从CCS环境到GPIO/ADC/PWM外设开发

简介:TMS320F28027 例程是一套针对TI C2000系列控制器的基础外设开发示例,适合刚接触DSP的嵌入式开发者、电力电子或电机控制方向的学生使用。内容围绕SCI串行通信、ADC模数转换、EPwm脉宽调制、定时器及SPI接口五个方向展开,每个模块均有可直…

2026/10/15 16:44:52 阅读更多 →
SPI 技术系列 00· 总目录

SPI 技术系列 00· 总目录

📚 I2C 技术系列 持续更新中 本系列从推挽电气层一路打到 Linux spi 子系统,把"四根线"背后的电气/协议/控制器/驱动/实战全拧成一根线。 👉 想系统追更,戳这里查看完整专栏: 【SPI 技术系列】 👉 其他技术…

2026/10/15 16:44:52 阅读更多 →
无监督单图三维重建:概率对称与可微渲染实战解析

无监督单图三维重建:概率对称与可微渲染实战解析

1. 项目背景与核心问题拆解1.1 这篇论文到底想解决什么问题单张图片重建三维物体,这个方向在计算机视觉里已经不算新鲜事了。但真正做过的人都知道,这里有个绕不开的坎:监督信号从哪来。用合成数据训练,模型到了真实照片上就拉胯&…

2026/10/15 16:44:52 阅读更多 →
AForge.NET 2.2.2实战指南:图像处理与DirectShow摄像头采集

AForge.NET 2.2.2实战指南:图像处理与DirectShow摄像头采集

简介:AForge.NET Framework 2.2.2 是一套面向 C# 开发者的计算机视觉与人工智能综合类库,覆盖图像处理、神经网络、遗传算法、机器学习、机器人控制等方向。该版本是 AForge 系列较新的正式发布版,官方定位适用于学术研究、教学实验和工业原型…

2026/10/15 16:44:52 阅读更多 →
MATLAB卫星姿态控制飞轮PID仿真全解析:建模、调参与避坑

MATLAB卫星姿态控制飞轮PID仿真全解析:建模、调参与避坑

简介:这是一套基于MATLAB的卫星姿态控制系统学习资源,采用飞轮作为执行机构,配合PID控制算法完成三轴姿态稳定控制。资料面向航天器工程与控制理论的初学者,也适合用作课程设计或毕业设计的参考项目。通过飞轮角动量交换与PID反馈…

2026/10/15 16:43:52 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →