在日常开发里API接口这件事几乎躲不掉。我做了几年后端和全栈开发最头疼的不是自己写接口而是接三方服务时找不到合适的免费API。市面上的接口平台不少但很多要么隐藏收费陷阱要么文档含糊其辞真正能拿来就用、稳定跑一段时间的免费API接口网站其实是一份稀缺资源。我这些年攒了一批实测过、目前仍然可用的免费API接口资源也踩过不少坑今天把它们整理出来连同我筛选API、对接API、排查报错的经验一起分享。这篇文章适合谁正在做个人项目、毕设、产品Demo的开发者或者公司里需要快速验证某个外部服务是否可行的人。我会把免费API接口按场景分类讲清楚怎么判断一个接口能不能用如何从一个接口文档里快速提取关键信息再附上实际的调用示例和报错排查记录。看完之后你至少能建立起自己的API选型标准不用再盲目去搜索引擎里碰运气。1. 为什么开发者手里必须有一份“免费API接口”清单1.1 从“能跑就行”到“稳定优先”免费API的真实价值很多人第一次接触API是在前端页面里调用后端同学写好的数据接口。那个阶段你可能觉得API不就是/api/user/list返回一段JSON嘛没多大技术含量。等到你自己独立做一个项目需要对接天气、地图、短信、快递、AI对话这些外部能力时才会发现API的水很深光知道URL地址远远不够还要理解鉴权、限流、参数校验、错误码、幂等性、超时重试这一堆概念。免费API接口网站的价值首先在于它们帮你把“外部服务接入”这件事的成本降到最低。商业API动辄按调用次数收费个人开发者一个月的调用量可能不到一万次却要付几百块钱根本不划算。免费API则让你在开发阶段、小流量场景下用接近零成本的方式验证你的业务逻辑到底通不通。我曾经在做一个聚合信息展示类的个人项目时前后接了八个免费API涵盖天气、新闻、IP归属地、二维码生成等整个项目跑下来一个月只花了域名和服务器费用API部分一分钱没出。这种情况下免费API的意义就不是“省一点钱”而是整个项目能活下去的底气。但免费API也有它的问题不稳定、随时可能停服、限流严苛、文档更新滞后。所以我强调的从来不是“你随便找一个免费API就能用”而是“你要有一套筛选和兜底策略”。免费不等于廉价更不等于可以盲目信任。1.2 免费API到底能撑起什么场景实践下来免费API接口网站上的资源大体能支撑这几类场景个人作品集和Demo项目最适合用免费API。接口的数据真实、动态比写死Mock数据有说服力得多。做前端作品集时接一个天气API或者股票行情API页面立刻活起来。数据分析和数据展示类产品免费API大多能满足中小体量的数据需求比如统计某地区的天气趋势、抓取当日热点新闻标题、查询域名/IP的归属信息。业务流程验证公司要接入一个新服务但你拿不准服务商的接口质量先用免费API把整套调用链路跑通再换商业API风险小很多。教学和持续集成测试我在写自动化测试脚本时经常用免费API作为Mock目标既不用自己维护一个假的HTTP服务又能测试代码对超时、错误码的处理逻辑。需要提醒的是医院挂号、支付、金融交易、政务数据这类场景别碰免费API。那不是一个级别的服务稳定性和安全性完全指望不上出了问题你也找不到责任人。免费API的合理定位就是“实验、教学、轻量级数据获取”超出这个范畴请直接走商业合作渠道。1.3 判断一个API是否值得接入的四个维度我在整理“免费可用API接口网站”清单时有一套自己的评估标准也建议你收藏后照此筛选评估维度具体问自己我的判断经验可用性接口现在还能调通吗响应正常吗先写一个最简单的请求试一下不能调通的直接排除别浪费时间去读文档稳定性这个API是不是经常报错响应时间是否波动大连续调用50次统计失败率和平均耗时超过5%失败率就谨慎使用文档质量接口参数、返回字段、错误码是否清晰文档写得含糊的大概率后续维护也不上心接入后迟早坑你更新频率接口是否经常变动是否公告停服看它的Changelog和公告板块半年以上没更新的API要特别注意这四个维度不是并列关系而是有优先级可用性不行后面三项都不用看。文档质量差但接口本身稳定可以考虑用但要做好自己踩坑的心理准备。最怕的是接口被外部服务依赖、流量一大就限流这种API就算免费也别接进核心链路。2. 免费API资源池的核心分类与接口定义2.1 互联网基础服务类API这类API是免费API资源里数量最多、也最好用的。它们解决的是互联网开发中绕不开的基础需求几乎每个项目都会碰到其中一个。天气查询API最经典的免费API类型。国内有和风天气的免费开发者版按城市名称或经纬度查实时天气数据质量不错。也有第三方聚合平台提供的国际城市天气接口用于展示“全球天气”场景。IP归属地查询API传一个IP地址进去返回该IP所在的国家、省份、城市、运营商。这个接口特别适合做登录日志、风控分析、访问统计的功能。二维码生成与解析API生成二维码是很多应用的基础功能但自己用Java或Python写一个二维码库也能做。用API的好处是返回图片流或图片URL前端直接展示省去本地生成和存储的麻烦。汇率换算API做跨境电商、出海工具类应用的时候很有用。免费额度通常每天几百次调用个人项目完全够用。随机数据API包括随机用户头像、随机文本、随机图片、随机手机号等。这个我强烈推荐给前端开发者做页面时就别再用手工造的假JSON数据了用这些API实时生成测试数据页面效果更逼真。接口定义上这类基础服务API大多遵循RESTful风格资源用名词命名操作通过HTTP方法表达。比如天气接口就是GET /v3/weather/now?locationxxx参数走Query String返回JSON格式。你不需要把所有API背下来只需要熟悉四五个这种风格就能很快上手绝大多数同类接口。2.2 AI大模型类APIAI大模型API是近两年免费API资源池里增长最快的分类。因为大模型厂商为了抢占市场普遍提供免费额度或者很低价的开发者试用额度。我实测下来目前可以用的包括DeepSeek API、讯飞星火API、智谱API、还有各种OpenRouter兼容接口。这里需要特别说明一下它们的通用性很多AI大模型API都兼容OpenAI的Message格式也就是[{role: system, content: ...}, {role: user, content: ...}, ...]这种结构。你只要写过一次这种对话接口的调用换其他的大模型API时改一下BaseURL和API Key就能跑通。AI大模型API能干什么个人项目里最典型的应用是聊天机器人、内容摘要、客户评论情感分析、代码生成助手、简历筛选辅助。我最近在维护一个内部的知识库问答工具接的就是DeepSeek的API把文档切块后存入向量数据库用户提问时先做语义检索再把检索结果拼进Prompt交给大模型做总结回答。实测下来免费额度的调用量支撑这样的个人使用场景绰绰有余。这类API在接口定义上有几个关键参数要认清model模型名称比如deepseek-chat、spark-lite。填错模型名直接报invalid model错误。messages对话历史注意它是数组不是字符串。max_tokens返回内容的最大长度控制不好容易截断或者超限。temperature温度参数控制回答的随机性。写代码建议低一点0.2左右创意写作可以调高。2.3 网络资讯与内容聚合类API如果你的项目需要展示新闻、热点、名言警句、豆瓣电影数据等内容这类API很合用。它们往往以“每日一条”“随机返回”的方式吐数据适合做首页装饰性内容、运营活动页、或者资讯类App的初期版本。典型的有新闻头条API聚合国内外新闻标题和链接免费版每日可调用几十次适合做“今日热点”栏目。每日一言/格言API随机返回一句名言或鸡汤内容很多个人网站的首页都在用。影视资讯API提供电影、电视剧的基本信息、评分、海报。做影视类个人项目时比你自己维护数据要省事得多。开源内容API比如GitHub的公开接口、博客公开RSS订阅解析接口等。这类接口背后是社区生态更新频率高生态活跃稳定性相对好。使用这类API要注意数据的使用合规。内容类的数据往往有版权边界你可以在自己的项目里展示但不要把它爬下来做二次售卖更不要用来做任何有商业性质的推荐。我这个人在开源社区待久了一直坚持一个原则可以白嫖接口的调用能力但不能白嫖内容本身的版权。2.4 电商与企业服务类API这一方向很多人不熟悉觉得免费API是个人开发者的玩具。实际上有好几个面向电商、企业管理场景的API也提供免费额度而且额度还不少。快递查询API对接快递鸟等平台免费额度支持查询主流快递公司的物流轨迹。个人开发的订单管理系统经常用到。短信发送API很多云服务商提供每月几十条免费短信额度用于验证码、通知类场景。注册类App在开发阶段用这个额度就够。OCR识别API百度、腾讯等大厂都提供OCR的免费调用额度可以识别身份证、银行卡、通用文字。虽然现在很多AI大模型也支持图片理解但专门的OCR接口在结构化字段识别上更精准。商品信息API用于查询电商平台商品的基本信息、价格走势。淘宝、拼多多等平台都有开放平台申请开发者权限后部分接口提供免费试用额度。电商类API有个特点保证金和审核机制比普通API严格得多。申请一个电商开放平台的API往往需要营业执照、应用截图、业务说明审核周期几天到几周不等。如果你只是业余项目没必要非在这种平台上死磕找一个第三方聚合类的免费API接口网站反而省事。3. API对接实操从申请Key到成功调用的全流程3.1 先认清常用的几种鉴权方式免费API的鉴权方式五花八门但归纳起来就四种。你理解它们背后的逻辑之后看任何API文档都能快速找到关键信息。最常见的是API Key也就是请求头加Authorization: Bearer xxx或者参数里带一个keyxxx。它相当于一把钥匙服务端通过这把钥匙认出你是谁、能调用多少次。申请API的时候在开放平台的控制台里一键生成Key复制下来配置到你的项目里。DeepSeek、智谱这类AI大模型的API基本都是这种方式。第二种是签名认证常见于电商、支付类API。请求参数按一定规则排序拼上密钥后做MD5或HMAC加密生成一个签名串随请求发出。服务端用同样的算法算一遍对比就知道数据有没有被人篡改。这个流程比API Key复杂但安全等级更高。第三种是OAuth2.0授权码模式常见于微信、GitHub这类需要以用户身份授权的场景。大概流程是你先引导用户跳转到授权页面用户同意后拿到code再用code换access_token。这个机制的好处是第三方服务不会拿到你的账号密码只获得你授权范围内的一小部分数据。第四种是IP白名单某些企业级API限制只有指定IP才能调用。你申请时填写自己的服务器IP之后调用时服务端校验来源IP不在名单里的请求直接拒绝。实操中我遇到免费API用的是API Key或者签名认证占总量的95%以上。OAuth2.0在免费API里比较少见因为它的实现成本高免费提供方不愿意做。你重点掌握的应该就是前两种。3.2 调用量、限流与频率免费API最容易踩的坑免费API的限流策略是你接入后最常碰到的技术难点。很多开发者失败就失败在“用商业API的思路调免费API”。什么叫限流就是服务方在单位时间内允许你调用多少次接口。常见的有QPS限流每秒最多N次、日调用量限制每天最多N次、并发数限制同一时刻最多N个请求。免费API的QPS往往压得很低可能在1到10之间日调用量几百到几万不等。如果你把商业API那种高并发调用逻辑直接搬过来免费API立刻把你拒之门外。我在项目里做过一个批量数据补全的任务要遍历一万个IP查询归属地最初写了个多线程脚本每秒钟发50个请求结果跑到第20个请求就被限流了返回429 Too Many Requests。解决限流问题核心是一个词限速。我在工具脚本里加了个线程安全的计数器确保每秒发不超过2个请求跑一万个IP用了大约1.5个小时全程没有再被限流。这只是策略之一更规范的做法是在请求代码里加入指数退避重试第一次429后等1秒重试还不行等2秒、4秒、8秒最多重试5次。利用响应头里的限流信息很多API会通过X-RateLimit-Limit和X-RateLimit-Remaining告诉你还剩多少额度。把这个值解析出来接近0时主动停掉请求任务。错峰调用把批量任务拆分到每天的00:00到06:00执行那个时间段调用的人少被限流的概率低。3.3 从API Key到响应解析一个完整的Python调用示例纸上谈兵没意思我直接用Python写一个完整的调用流程给大家看。这里以AI大模型API为例因为这种API接口定义最标准、最容易套用到其他场景。第一步申请API Key。无论哪个免费API平台流程基本都是注册账号、创建一个应用、生成一个API Key、把Key复制到本地环境变量里。第二步写调用代码。下面是一个兼容OpenAI消息格式的AI大模型API调用示例我把关键参数都注释了import os import requests # 从环境变量读取API Key不要硬编码在代码里 API_KEY os.getenv(LLM_API_KEY, your-api-key) BASE_URL os.getenv(LLM_BASE_URL, https://api.example.com/v1) MODEL deepseek-chat def chat_with_model(prompt: str) - str: url f{BASE_URL}/chat/completions headers { Authorization: fBearer {API_KEY}, Content-Type: application/json, } payload { model: MODEL, messages: [ {role: system, content: 你是一个乐于助人的助手。}, {role: user, content: prompt}, ], max_tokens: 512, temperature: 0.7, } try: resp requests.post(url, jsonpayload, headersheaders, timeout30) resp.raise_for_status() data resp.json() return data[choices][0][message][content] except requests.exceptions.HTTPError as e: # 打印状态码和响应体方便排查 print(fHTTP {e.response.status_code}: {e.response.text}) raise except requests.exceptions.Timeout: print(请求超时) raise if __name__ __main__: print(chat_with_model(用一句话解释什么是幂等性))这段代码有几个细节值得说明环境变量管理API Key把密钥写在代码里一旦代码传到GitHub就可能泄露。我建议用.env文件配合python-dotenv库或者在部署环境里配置真实的环境变量。timeout是必须的很多免费API响应不稳定偶发几秒钟的延迟不设超时会导致请求线程一直挂起拖垮整个应用。错误处理要细不只是把异常打印出来还要区分是网络错误、鉴权错误还是限流错误分别做不同的处理策略。第三步调用成功后解析响应。大模型API返回的JSON结构很统一data.choices[0].message.content就是助手返回的内容。如果你用的是天气API返回的可能是data.now.temp这样的字段路径。不同的API数据结构不同唯一通用的方法论就是先用一个在线JSON格式化工具把返回数据展示出来找到你要的字段再写解析代码。3.4 接口幂等性与重试机制聊到重试就必须说一个很多新手没听过的词接口幂等性。幂等性是指同一个接口请求你调用一次和调用一百次对服务端产生的结果是一样的。典型的幂等操作是查询天气调一次和调十次结果没有区别都是返回当前天气。典型的非幂等操作是发短信调一次扣一次短信条数调用十次就是十条验证码对不同用户会造成灾难性影响。为什么要区分幂等性因为网络不稳定时你的请求可能发送成功但响应超时了你不确定服务端到底有没有处理。这时候如果直接重试可能会造成重复扣费或重复发短信。正确做法是在请求中带上幂等键Idempotency-Key比如UUID。服务端收到带幂等键的重复请求时会直接返回第一次处理的结果而不创建新的操作。对于免费API大多数查询类接口天然幂等直接重试没风险。但涉及创建资源、发送通知的接口你要在业务层设计幂等逻辑。我的做法是把业务请求按操作内容计算一个哈希值存入Redis里键就是幂等键。每次请求前先检查Redis里有没有已成功的记录有就直接复用响应没有再发起新请求。3.5 观察每次调用日志记录是排查问题的前提说一个我在实战中反复吃亏才养成的习惯所有API调用必须打日志。方便到什么程度我每次接一个新API第一步就写一个简单的日志装饰器把请求URL、请求头、请求体、响应状态码、响应体全部记录到本地文件。import json import logging from datetime import datetime logging.basicConfig(filename/var/log/api_call.log, levellogging.INFO, format%(asctime)s %(levelname)s %(message)s) def log_api_call(api_name, request_info, response_info): logging.info(json.dumps({ api: api_name, time: datetime.now().isoformat(), request: request_info, response_status: response_info.status_code, response_body: response_info.text[:500], }, ensure_asciiFalse))线上出问题的时候这份日志就是你排查的第一手证据。没有日志就只能靠猜猜来猜去浪费时间。有了日志一个grep就能定位到报错的请求体和时间点直接复现、修复、回归。4. 常见报错与排查技巧实录4.1 鉴权失败类报错Code 401/403这类报错的直观表现是返回401 Unauthorized或403 Forbidden以及一些错误码提示比如api_key_required、invalid api key。我在接API时见过太多次。排查步骤往往是检查API Key是否复制完整。长密钥容易被编辑器截断我建议把Key放在双引号里echo $API_KEY打印出来核对。检查请求头格式。到底是Authorization: Bearer xxx还是Authorization: xxx不同平台五花八门必须看文档确认。检查环境变量是否生效。很多新手改了代码里的API_KEY但系统读取的还是旧环境变量导致新Key始终不生效。有一个经验免费API经常更换Key签发规则半年后再看文档旧Key可能已经失效。如果你的项目在半个月前还能跑现在突然全部401先回控制台看Key是否被重置了。4.2 参数错误与模型名不匹配Code 400400 Bad Request通常是参数格式的问题。最常见的场景是AI大模型API里填错模型名称。现在大模型厂商更新频繁模型名经常改比如有的接口要求传deepseek-flash有的要求传deepseek-v4填错就报the supported api model names are ...。这个错误是明确指向参数本身排查起来很简单把报错信息里提示支持的模型名复制上去就行。另一个容易忽略的点是max_tokens的设定。大模型的上下文长度有限制比如有的模型最大支持1048576 tokens的上下文但是你在窗口期较长的会话里塞入了太多历史消息导致请求超限返回类似错误this models maximum context length is 1048576 tokens。解决办法是控制对话历史长度只保留最近N条消息或者用向量检索代替全量摘要。4.3 限流与配额超限Code 429429是免费API最经典的报错。我见过两种不同的提示一种是直接返回Too Many Requests另一种是返回更具体的说明比如超过5小时使用配额限制。不管是哪种处理思路都一样先看响应头里的限流信息算一下当前额度余量。降低请求频率把并发改为串行或者加大请求间隔。开启指数退避重试但要注意设置最大重试次数否则死循环反而让服务方对你有意见。检查代码里是否有死循环或过多重试逻辑。我曾经调试一个程序因为异常处理不当把一次操作放进了循环里导致一秒钟连续触发了几十次请求直接把当天额度用光了。限流这件事不要总想着绕过去。免费API的提供方也要控制成本你一个免费用户去暴力调用不仅影响服务稳定性还可能被平台封号。与其对抗限流不如把调用策略设计得更优雅。4.4 网络连接与Docker环境问题Connection refused / Docker API error这类报错往往不是API服务方的问题而是你本地环境的问题比如failed to connect to the docker api at npipe:////./pipe/dockerdesktoplinuxen。这个报错我见过很多次主要出现在Windows上配置Docker Desktop时。原因是Docker Desktop的Linux引擎没有启动或者端口映射没有配置好。排查方法是打开Docker Desktop确认引擎状态是Running然后检查容器网络是否正常。我建议把API调用代码跑在本地Python环境或者独立容器里不要和一个复杂的Docker容器编排环境纠缠。因为你定位API报错的时候第一要务是排除外部环境干扰。4.5 接口响应慢与直觉相反的优化思路免费API响应慢是常态特别是在晚间流量高峰时段。千万不要以为是你代码写得有问题然后去反复调试自己的代码浪费时间。处理思路有两个维度。第一个维度是缓存对于天气、IP归属地这种变化频率较低的数据设置一个合理的缓存时间比如十分钟。缓存命中时完全不调用API响应用户的速度极快也节省了API配额。第二个维度是降级如果一个API连续失败三次就切换到备用API或者直接返回缓存中最近一次成功结果。这个策略叫“优雅降级”用户感知不到服务中断。我在做个人项目时体会很深一次接口超时如果前端没有做任何异常处理用户看到的就是白屏。加上超时控制和降级策略之后即使API坏了用户还是能看到上次的缓存数据体验完全不一样。5. 我的实用数据库与免踩坑经验总结5.1 免费API接口的“元资源”查找路径大平台、小网站的免费API资源非常多怎么高效检索我的习惯是先看新近的开发者社区和聚合搜索平台它聚集了大量经过筛选的免费API入口按分类展示。其次去科技大厂的开发者社区这些平台维护相对规范API文档全部开放浏览。有两个指标我会重点参考第一是调用量一个API被人用了很多次说明它可用概率高第二是社区活跃度GitHub上有项目在持续更新说明它没有被废弃。5.2 免踩坑建议API不是收藏得越多越好我见过不少开发者看到免费API资源就收藏收藏了上百个网站真正用到的不到十条。我的经验是与其疯狂收藏不如认真吃透三五条你真正会用到的API。收藏不进代码的API等于不存在。整理出来的清单里每一条我都会实际调一次记录响应时间、返回结构、限流规则。这样真正开发时从自己的清单里拿一个就能用不用临时去研究文档。5.3 后续可以这样扩展从免费到自建免费API用得多了你会慢慢意识到它的两个天花板限流和不可控。当你的项目规模变大依赖一个免费API来做核心功能会越来越不踏实。这时可以考虑两条路径一是转为商业API购买更高配额换回稳定性二是把高频调用的免费API结果缓存下来或者把数据主动同步到自己的数据库里甚至自己实现这个接口。我自己就是这么过来的最开始接免费的IP归属地API后来发现查询量大就把每月一次全量IP数据包拖下来导入本地数据库查询完全本地化速度比原来快了几十倍成本为零。这个思路特别适合那些数据更新频率不高的API一次同步长期使用。踩过这么多坑我个人最大的体会是免费API不是“技术含量低”的领域恰恰相反它是训练你接口设计、故障排查、流量控制的最好沙盒。每一个报错都逼着你去理解服务端的规则每一次限流都在训练你设计优雅的调用策略。如果你也在用免费API做项目不妨用我这个思路重新审视你的调用流程把那些“能用”的接口变成“值得用”的接口。
企业数字化 ERP 产品动态
相关推荐
通达信超前MACD指标:源码、实战细节与未来函数识别,从原理讲到Python验证 如果你在通达信里搜“MACD改进”“MACD超前”这类关键词,大概率会翻到一堆信号图亮得离谱的指标源码——红柱总是先一步出现,绿柱逃顶从来不含糊,复盘曲线像被剧本写好了一样。但等你真装进软件,盘后回看全是神操作,实… · 2026/9/25 21:50:28
快餐门店数字化降本增效:适配快餐店的门店管理系统选型分析 快餐行业作为本地生活消费的核心赛道,具备出餐快、客单低、客流集中、周转高频的典型业态特征,门店盈利高度依赖人效、坪效与库存周转效率。在后疫情时代消费趋于理性、门店人力与食材成本持续走高的行业背景下,传统快餐门店人工记账、手动盘… · 2026/9/25 21:50:09
千笔AI解答:论文AIGC检测与AI降重工具常见疑问 论文aigc率多少算正常
目前不同高校、期刊对论文AIGC率的合格标准没有统一的规定,主流的要求区间通常控制在10%-30%以内。千笔AI平台结合大量高校送检案例整理了常见的标准参考如下:
场景合理AIGC率区间说明本科毕业论文≤20%部分宽松院校可放宽至30%硕士… · 2026/9/25 21:50:09
第 12 章 综合实战:完整信号链与双电机 最后一章把全书串成一条完整的"信号链",并完成:
①从代码到电机动作的每一环;②完整演示程序逐行(真实 main.cpp 全文);
③接线清单;④排查流程;⑤双电机挑战(… · 2026/9/25 22:28:14
第 11 章 优化与调试:从体积账单到崩溃定位 本章是"工程能力"章:①固件体积怎么优化(含本书真实账单);②崩溃
(Guru Meditation)到底是什么机制;③用 addr2line 把崩溃地址翻译成
代码行的完整方法(含本书真实案例&a… · 2026/9/25 22:28:14
第一次用网络分析仪完成低通滤波器带内插损与带外抑制调谐时的通透 第一次用网络分析仪完成低通滤波器带内插损与带外抑制调谐时的通透在射频微波与模拟电路调试领域,如果说频谱分析仪(Spectrum Analyzer)是观察信号频域特征的“眼睛”,那么双端口矢量网络分析仪(VNA, Vector Network A… · 2026/9/25 22:28:02
第 15 章 中断与实时性:让芯片“立刻响应“ 第 4 章我们第一次接触中断(按钮下降沿)。本章系统讲透:
中断的完整机制(向量、上下文切换)、ISR 的硬规则(为什么必须快、
为什么不能随便调用函数)、volatile/IRAM_ATTR 的作用、
以及"从… · 2026/9/25 22:28:02
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37