☰
  • 首页
  • 最新公告
  • 官方FAQ
  • 集群服务器大盘
  • 今日热力图
  • 超级客户端
  • 定制与合作
  • 关于我们
  • 登录|注册
  • MySQL中触发器详解 触发器在自动化任务中的应用场景

    触发器是mysql中与表关联的数据库对象,能在特定操作(如insert、update、delete)发生时自动执行预定义sql逻辑。其核心用途包括:1. 维护数据一致性,如订单插入后自动减少库存;2. 记录审计日志,如保存员工薪资变更记录;3. 数据验证,如阻止负工资插入。创建语法为create trigger并绑定事件类型及表,每个表最多支持6种触发器。使用时需注意避免滥用、性能影响、调试困难及循环触发问题。合理使用可提升系统自动化与数据可靠性。 触发器在MySQL中是一个非常实用但容易被忽视的功能,它能在特定的数据库操作(如INSERT、UPDATE或DELETE)发生时自动执行一段预定义的SQL逻辑。这种“自动执行”的特性让它特别适合用于自动化任务,比如数据校验、日志记录、状态更新等。 什么是触发器 触发器是与表相关联的数据库对象,它会在某个事件(BEFORE/AFTER INSERT/UPDATE/DELETE)发生时自动触发执行。它的核心作用是在不修改业务代码的前提下,实现数据层面的自动化处理。 举个简单的例子:当你在订单表里插入一条新订单时,想让库存表里的商品数量自动减少,就可以通过一个AFTER INSERT触发器来完成这个操作。 触发器的语法大致如下:CREATE TRIGGER 触发器名称 BEFORE/AFTER 事件类型 ON 表名 FOR EACH ROW BEGIN -- SQL语句 END;需要注意的是,触发器不能直接调用,只能通过对应的表操作来触发,并且每个表最多可以有6种不同类型的触发器(BEFORE INSERT、AFTER INSERT 等)。 触发器在自动化任务中的常见应用场景 1. 数据一致性维护 这是触发器最常用的一个场景。例如,当一张主表的数据发生变化时,你希望相关的从表也能同步更新某些字段。 比如,有一个用户表和一个用户统计表,每当用户信息更新后,你可以设置一个AFTER UPDATE触发器,把更新时间同步到统计表中:CREATE TRIGGER update_user_stat AFTER UPDATE ON users FOR EACH ROW BEGIN UPDATE user_stats SET last_updated = NOW() WHERE user_id = NEW.id; END;这种方式避免了在应用层重复写更新逻辑,也减少了出错的可能性。 2. 审计日志记录 如果你需要记录某些关键表的操作历史,比如谁在什么时候做了什么更改,触发器可以帮你自动完成这些记录。 比如,在员工表上建立一个AFTER UPDATE触发器,把旧值和新值都记录到日志表中:CREATE TRIGGER log_employee_update AFTER UPDATE ON employees FOR EACH ROW BEGIN INSERT INTO employee_logs (employee_id, old_salary, new_salary, change_time) VALUES (OLD.id, OLD.salary, NEW.salary, NOW()); END;这样就能轻松实现对敏感操作的追踪,而不需要每次都在代码中手动记录。 3. 数据验证与限制 有时候你想在数据插入或更新前做一些检查,比如确保某字段的值符合一定规则。 比如,防止工资低于0:CREATE TRIGGER validate_salary BEFORE INSERT ON employees FOR EACH ROW BEGIN IF NEW.salary < 0 THEN SIGNAL SQLSTATE 45000 SET MESSAGE_TEXT = Salary cannot be negative; END IF; END;这种方式可以在数据库层面上提供额外的安全保障,避免非法数据进入系统。 使用触发器时的一些注意事项 不要过度使用:虽然触发器能简化逻辑,但如果滥用,会导致业务流程变得难以理解和维护。 性能问题:触发器是在事务中执行的,如果里面包含大量复杂逻辑,可能会影响整体性能。 调试困难:触发器不像存储过程那样可以直接调用,调试起来比较麻烦。 避免循环触发:比如触发器A修改了表X,又触发了另一个触发器B,如果B又反过来修改了X,就可能导致无限循环。 总的来说,MySQL中的触发器是一种强大的工具,尤其适用于那些需要自动响应数据变化的场景。只要合理使用,就能大大提升系统的自动化程度和数据的一致性。 另外我们在日常开发中通常会用到各种API接口,比如查询用户IP归属地,手机号归属地,天气预报,万年历等,这时我们可以直接去接口盒子https://www.apihz.cn 查找需要的API即可。接口盒子有数百个免费API,而且采用集群化服务器部署,比一般的API服务商更加稳定。

  • sql如何查询表中数据 sql表数据查询技巧

    在sql中提高查询效率的技巧包括:1. 使用select指定列名减少数据传输;2. 用where子句过滤数据;3. 用order by排序结果;4. 用limit和offset实现分页;5. 使用join结合多表数据;6. 用子查询处理复杂逻辑;7. 用group by和聚合函数统计数据;8. 创建索引优化查询性能;9. 使用参数化查询防止sql注入。掌握这些技巧可以显著提高sql查询效率。 在SQL中查询表中的数据是一项基本但非常重要的技能,尤其是在处理大规模数据时,掌握一些查询技巧可以大幅提高你的工作效率。今天,我想和你分享一些我积累的SQL查询经验和技巧,希望能帮助你更高效地操作数据库。 SQL查询的基本语法是SELECT语句,这应该是大家都熟悉的。然而,仅仅知道基本语法是不够的,如何高效地使用它才是关键。让我们从一些基本的查询开始,然后逐步深入到更复杂的查询技巧。 首先,我们来看一个简单的查询示例:SELECT * FROM customers;这个查询会返回customers表中的所有数据。在实际工作中,我们通常不会需要所有列的数据,而是只需要其中的一部分。因此,一个更常见的查询可能是这样的:SELECT name, email FROM customers;这只会返回customers表中的name和email列。通过指定列名,我们可以减少数据传输量,提高查询性能。 在进行查询时,经常需要根据某些条件过滤数据。这时我们可以使用WHERE子句:SELECT name, email FROM customers WHERE country = USA;这个查询会返回所有来自美国的客户的姓名和邮箱。使用WHERE子句可以让我们精确地获取所需的数据,避免不必要的数据处理。 有时候,我们需要对查询结果进行排序,这时可以使用ORDER BY子句:SELECT name, email FROM customers WHERE country = USA ORDER BY name ASC;这个查询会按姓名升序返回美国客户的数据。排序可以帮助我们更容易地浏览和分析数据。 在处理大量数据时,分页查询是一个非常有用的技巧。使用LIMIT和OFFSET可以实现分页:SELECT name, email FROM customers LIMIT 10 OFFSET 0;这个查询会返回customers表的前10条记录。通过调整OFFSET,我们可以获取不同的页面数据。 除了这些基本的查询技巧,还有一些更高级的技巧可以帮助我们处理复杂的查询需求。比如,使用JOIN可以将多个表的数据结合起来:SELECT customers.name, orders.order_date FROM customers JOIN orders ON customers.id = orders.customer_id;这个查询会将customers表和orders表结合起来,返回每个客户的姓名和订单日期。JOIN是SQL中非常强大的功能,可以帮助我们处理多表查询。 在进行复杂查询时,子查询也是一个常用的技巧。子查询可以让我们在一个查询中嵌套另一个查询:SELECT name FROM customers WHERE id IN (SELECT customer_id FROM orders WHERE order_date > 2023-01-01);这个查询会返回在2023年1月1日之后有订单的客户姓名。子查询可以帮助我们处理一些复杂的逻辑条件。 在实际工作中,我们经常需要对数据进行聚合操作,比如计算总数、平均值等。这时可以使用GROUP BY和聚合函数:SELECT country, COUNT(*) AS customer_count FROM customers GROUP BY country;这个查询会按国家统计客户数量。GROUP BY和聚合函数可以帮助我们从数据中提取有用的统计信息。 在进行这些复杂查询时,性能优化是一个非常重要的方面。索引是提高查询性能的关键工具。通过在经常使用的列上创建索引,可以显著提高查询速度:CREATE INDEX idx_country ON customers(country);这个语句会在customers表的country列上创建一个索引。有了这个索引,之前的按国家统计客户数量的查询会变得更快。 然而,索引并不是万能的。过多的索引会增加数据插入和更新的开销,因此需要在查询性能和数据维护之间找到平衡。 在使用SQL进行查询时,还有一些常见的错误和调试技巧需要注意。比如,SQL注入是数据库安全的一个重要问题。通过使用参数化查询,可以有效防止SQL注入:PREPARE stmt FROM SELECT name, email FROM customers WHERE country = ; EXECUTE stmt USING USA;这个查询使用了参数化查询,避免了直接将用户输入拼接到SQL语句中,从而防止了SQL注入攻击。 总的来说,SQL查询是一门艺术,需要我们在实践中不断摸索和优化。 另外我们在日常开发中通常会用到各种API接口,比如查询用户IP归属地,手机号归属地,天气预报,万年历等,这时我们可以直接去接口盒子https://www.apihz.cn 查找需要的API即可。接口盒子有数百个免费API,而且采用集群化服务器部署,比一般的API服务商更加稳定。

  • 全球域名WHOIS信息查询免费API接口教程

    接口简介: 支持查询全球各类域名whois信息,支持超过1000+域名后缀查询,顶级与国别域名等。返回原始whois信息内容。 请求地址: https://cn.apihz.cn/api/wangzhan/whoisall.php 请求方式: POST或GET。 请求参数: 【名称】【参数】【必填】【说明】 【用户ID】【id】【是】【用户中心的数字ID,例:id=10000000】 【用户KEY】【key】【是】【用户中心通讯秘钥,例:key=15he5h15ty854j5sr152hs2】 【域名】【domain】【是】【要查询的域名,尽量使用主域名,不带http。例:domain=erguanmingmin.com】 【查询方式】【type】【否】【1=优先使用查询缓存,2=直接查询注册局官方,默认1。例:type=1】 返回参数: 【名称】【参数】【说明】 【状态码】【code】【200成功,400错误】 【信息提示】【msg】【提示信息。】 【whois信息】【data】【由于官方各种域名whois信息格式不相同,请自行提取需要内容。首次查询换行字符为杠r杠n,请自行替换回车。】 GET请求示例: https://cn.apihz.cn/api/wangzhan/whoisall.php?id=88888888&key=88888888&domain=erguanmingmin.com&type=1 注意:示例里的ID与KEY为公共ID与KEY,共享每分钟调用频次限制,接口本身免费,请使用自己的ID与KEY,独享每分钟调用频次。每日调用无上限。 POST请求示例: 请根据开发语言自行POST。 返回数据示例: 示例:{"code":400,"msg":"通讯秘钥错误。"} 示例: { "code": 200, "whois": "Domain Name: apihz.cn ROID: 20240319s10001s56425741-cn Domain Status: clientTransferProhibited Registrant: 绵阳耳关明皿网络科技有限公司 Registrant Contact Email: erguanmingmin@qq.com Sponsoring Registrar: 腾讯云计算(北京)有限责任公司 Name Server: ns3.dnsv2.com Name Server: ns4.dnsv2.com Registration Time: 2024-03-19 01:34:31 Expiration Time: 2027-03-19 01:34:31 DNSSEC: signedDelegation " } 参考资料(版权): https://www.apihz.cn/api/wangzhanwhoisall.html

  • 如何在IDEA中使用DeepSeek

    引言2025年的春节可以说是人工智能在中国史上飘红的一段历史时刻,年后上班的第一天,便马不停蹄的尝试新技能。今天的科技在飞速发展,编程领域的人工智能工具犹如雨后春笋般涌现。其中,DeepSeek 则以其卓越的性能和智能化的功能,迅速在众多开发者中赢得了青睐。对于 Java 开发者而言,将 DeepSeek 集成到 IDEA 中,就如同为自己的编程之路配备了一位智能助手,大幅提升开发效率,让编程变得更加轻松愉悦。接下来,我就为大家详细介绍如何将 DeepSeek 集成到 IDEA 中。一 环境准备1.1 适配 IDEA 版本为了更好的使用插件,这里推荐使用一个代理插件——CodeGPT,CodeGPT是一个AI驱动的代码助手,旨在帮助开发者进行各种编程活动,它是GitHub Copilot、AI Assistant、Codiumate和其他JetBrains插件的强大替代品。安装之前确保你的 IDEA 处于 2023.x 及以上的较新版本。高版本的 IDEA 不仅在功能上更加完善,而且在与 DeepSeek 的兼容性和稳定性方面也有更好的表现,能够为后续的集成工作提供坚实的基础。如果是访问网页,而且在登录状态时,这里会提示你直接安装到工具中。具体的版本可以参考下插件信息:https://plugins.jetbrains.com/plugin/21056-codegpt1.2 安装 Python 环境DeepSeek 助手依赖 Python 环境来运行,需要提前在操作系统中安装 Python 3.7 及以上版本。安装完成后,务必将 Python 添加到系统环境变量中。这一步至关重要,它能确保系统在后续调用 Python 时能够准确找到其路径,避免因环境配置问题导致的集成失败。Macbook:GithubCommitSpace Aion$ python --versionPython 3.12.8Macbook:GithubCommitSpace Aion$二 下载与安装 DeepSeek 插件2.1 在IDEA 插件市场安装AI驱动代码助手启动 IDEA 后,在菜单栏中找到 “File” 选项。如果你使用的是 Windows 或 Linux 系统,点击 “Settings”;如果你使用的是 Mac 系统,则点击 “IntelliJ IDEA”,再选择 “Preferences(设置…)”。在弹出的设置窗口中,找到 “Plugins(插件)”,这里便是 IDEA 的插件管理中心。选中Marketplace后,在输入框输入 codeGpt 选择 CodeGpt 最右侧会显示详细信息,点击 安装 按钮后等待知行安装,最后点击确认。安装插件会重新启动IDEA,重新启动即可。2.2 配置 DeepSeek2.2.1 创建并设置 API Key在 DeepSeek 官网(https://www.deepseek.com/)找到 API开放平台,点击进去。在开放平台找到 API keys 菜单,这里可以创建API key。如果 DeepSeek 需要 API Key 进行认证,你需要在 IDEA 的设置中找到 “DeepSeek” 选项。在这里,填入你从 DeepSeek 官方网站或相关平台获取的 API Key。这个 Key 就像是一把钥匙,能够解锁 DeepSeek 的全部功能,确保你能够正常使用它提供的各项服务。2.2.2 IDEA中集成DeepSeek重复上述的设置操作,在IDEA中找到已经安装的插件 CodeGpt 工具的设置,然后依次找到 Custom OpenAI 的设置。这里有三部分需要配置,第一个是选择模版,输入API KEY;第二个是配置聊天模型;第三个是配置推理模型。第一个,配置API KEY,这个API KEY就是在 步骤2.2.1 创建的API KEY,可以直接拷贝到这里粘贴即可。第二个是对话模型,这里需要配置两处,1 在URL处粘贴URL:https://api.deepseek.com/chat/completions2 将请求的模型修改为:deepseek-chat第三个是推理模型,这里也需要配置四处1 勾选?? Enable code completions和勾选?? Parse response as Chat Completions2 选择FIM template 选择为 DeepSeek Coder 。3 在URL处粘贴URL:https://api.deepseek.com/chat/completions4 将请求的模型修改为:deepseek-reasoner通过上述步骤,即可配置完成,配置完成后,点击应用和确认即可。2.2.3 DeepSeek配置手册如果还不明白如何配置,可以参考下官方提供的配置策略。https://api-docs.deepseek.com/zh-cn/三 使用 DeepSeek 进行编程3.1 获取思路和代码找到CodeGpt组件,找到对话框,选择Custom OpenAI,然后输入内容即可对话。例如 给出口令:使用java语言写一个过滤数字的方法并给予测试给出代码如下:public class TestNumberFilter { public static String filterNumbers(String input) { // 使用正则表达式匹配所有数字 return input.replaceAll(^0-9, ); } public static void main(String args) { String testInput = abc123def456ghi; String testInput2 = SSFSDFS结论萨芬122432的噶大都是4无人区是14认识832safsss; String result = filterNumbers(testInput2); System.out.println(Filtered numbers: + result); // 输出: 123456 }}3.2 代码补全应用在编写代码时,当你输入部分代码后,只需按下快捷键(通常是 Ctrl + Space,你也可以在设置中根据自己的习惯进行自定义),DeepSeek 就会迅速分析代码上下文,智能补全后续代码。这一功能大大节省了代码编写时间,让你的编程效率直线上升。3.3 代码解释对于一些复杂的代码段,理解起来可能会有些困难。这时,你只需选中代码,然后右键点击,选择 “CodeGPT”,DeepSeek 便会为你详细解读代码的功能和逻辑。有了它的帮助,代码维护和调试变得更加轻松。3.4 问题解答在编程过程中,遇到问题是常有的事。当你遇到难题时,无需再四处查找资料,直接在代码编辑器中选中相关代码或描述问题,然后选择 “CodeGPT: Ask Question”,DeepSeek 会根据你的问题给出针对性的解决方案和建议。它就像一位随时在线的编程导师,为你排忧解难。四 DeepSeek用量统计体验了一把DeepSeek,那么最关心的tokens使用量如何呢?还是得去官网查看用量信息。每月用量统计,按天统计,并折算为实际金额,我这里是使用的体验金额。deepseek-chat模型的具体使用量,包括API请求次数,tokens使用数量。总结通过以上步骤,你就成功地将 DeepSeek 集成到了 IDEA 中。在今后的编程工作中,你可以尽情享受 DeepSeek 带来的便利和高效,感受它为你带来的那些温暖治愈的瞬间,领略编程世界的无限魅力。 另外我们在日常开发中通常会用到各种API接口,比如查询用户IP归属地,手机号归属地,天气预报,万年历等,这时我们可以直接去接口盒子https://www.apihz.cn 查找需要的API即可。接口盒子有数百个免费API,而且采用集群化服务器部署,比一般的API服务商更加稳定。

  • MySQL删除表数据、清空表命令(truncate、drop、delete 区别)

    一、MySQL清空表数据三种方法1.1 清空表数据:truncatesql命令#清空多张表、库中所有表的数据truncate table table_name1,table_name2,...;#清空单张表的数据truncate table table_name;注意:truncate会删除表中的所有数据、释放空间,但是保留表结构只能操作表,不能与where一起使用truncate删除操作立即生效,原数据不放到rollback segment中,不能rollback,操作不触发triggertruncate删除数据后会释放表空间、重置Identity(标识列、自增字段),相当于自增列会被置为初始值,又重新从1开始记录、而非接着原来的id数truncate删除数据后不写服务器log,整体删除速度快1.2 删除表:dropsql命令drop table table_name;drop table if exists table_name;注意:drop会删除整个表,包括表结构和数据,释放空间立即执行,执行速度最快不可回滚1.3 删除/清空表数据:deletesql命令#删除部分数据delete from tb_name where clause;#清空表,仅删除数据、保留表结构,同时也不释放表空间delete from tb_name;注意:删除表中数据而不删除表结构,也不释放空间delete可以删除一行、多行、乃至整张表每次删除一行,都在事务日志中为所删除的每行记录一项,可回滚如果不加where条件,表示删除表中所有数据,仅删除数据、保留表结构,同时也不释放表空间MySQL、Mariadb、PostgreSQL删除表数据、清空表命令 都可用以上三种命令。二、使用原则使用原则总结如下:当你不需要该表时(删除数据和结构),用drop;当你仍要保留该表、仅删除所有数据表内容时,用truncate;当你要删除部分记录、且希望能回滚的话,用delete;在没有备份的情况下,谨慎使用drop、truncate。在实际应用中,要根据具体需求和场景选择合适的操作。三、truncate、drop、delete区别truncate、delete和drop都是用于删除数据或表的操作,但它们之间有一些关键的区别:操作类型:truncate:删除表中的所有数据,保留表结构,释放空间。它是一种DDL(数据定义语言)操作,执行速度较快。delete:删除表中的特定行,可以逐行删除,保留表结构,也不释放空间。它是一种DML(数据操作语言)操作,执行速度较慢。drop:删除整个表,包括表结构和数据,释放空间。它是一种DDL操作,但不同于truncate,它会释放表所占用的空间。数据删除方式:truncate:删除表中的所有数据,但不会删除表结构。适用于需要保留表结构的情况。delete:删除表中的特定数据,可以根据条件删除,表的结构和约束保持不变。适用于需要根据特定条件删除数据的情况。drop:删除整个表,包括表结构和数据。适用于不再需要表结构的情况。执行速度:drop > truncate > deletetruncate:执行速度较快,因为它一次性删除所有数据,过释放表的存储空间来删除数据,并将表重置为初始状态。delete:执行速度较慢,因为它需要逐行删除数据,并且会生成大量的事务日志,同时也不释放空间。drop:执行速度较快,因为它一次性删除整个表。回滚能力:truncate:不可回滚,一旦执行,数据将被永久删除、无法恢复。delete:可以回滚,使用ROLLBACK语句可以撤销删除操作。drop:不可回滚,一旦执行,表结构和数据都将被永久删除。触发器:truncate:不会触发触发器。delete:会触发触发器。drop:不会触发触发器,因为它是删除整个表。总结:如果您需要快速删除整个表中的数据,但保留表结构,可以选择truncate。如果您需要删除特定行的数据,可以根据条件删除,可以选择delete。如果您需要删除整个表,包括表结构和数据,可以选择drop。在实际应用中,要根据具体需求和场景选择合适的操作。 另外我们在日常开发中通常会用到各种API接口,比如查询用户IP归属地,手机号归属地,天气预报,万年历等,这时我们可以直接去接口盒子https://www.apihz.cn 查找需要的API即可。接口盒子有数百个免费API,而且采用集群化服务器部署,比一般的API服务商更加稳定。

  • 深入理解分布式锁Redis

    一、分布式锁简介1. 什么是分布式锁分布式锁是一种在分布式系统环境下,通过多个节点对共享资源进行访问控制的一种同步机制。它的主要目的是防止多个节点同时操作同一份数据,从而避免数据的不一致性。线程锁:也被称为互斥锁(Mutex),主要用于控制同一进程中的多个线程对共享资源的访问。进程锁进程锁是用于控制同一台机器上的多个进程对共享资源的访问。进程锁可以是系统级的,如文件锁,也可以是用户级的,如信号量(Semaphore)。分布式锁分布式锁是用于控制分布式系统中的多个节点对共享资源的访问。由于分布式系统中的节点可能位于不同的机器甚至不同的地理位置,因此分布式锁的实现比线程锁和进程锁要复杂得多。分布式锁需要在网络中的多个节点之间进行协调,以保证锁的唯一性和一致性。2. 分布式锁的特性分布式锁主要有以下几个特性:互斥性:在任何时刻,只有一个节点可以持有锁。不会发生死锁:如果一个节点崩溃,锁可以被其他节点获取。公平性:如果多个节点同时申请锁,系统应该保证每个节点都有获取锁的机会。可重入性:同一个节点可以多次获取同一个锁,而不会被阻塞。高可用:锁服务应该是高可用的,不能因为锁服务的故障而影响整个系统的运行。二、分布式锁的基本原理1. 分布式锁的基本步骤分布式锁的基本原理可以分为以下几个步骤:请求锁:当一个实例需要访问共享资源时,它会向分布式锁系统发送一个请求,试图获取一个锁。锁定资源:分布式锁系统会检查是否有其他实例已经持有这个锁。如果没有,那么这个实例就会获得锁,并且有权访问共享资源。如果有,那么这个实例就必须等待,直到锁被释放。访问资源:一旦实例获取了锁,它就可以安全地访问共享资源,而不用担心其他实例会同时访问这个资源。释放锁:当实例完成对共享资源的访问后,它需要通知分布式锁系统释放锁。这样,其他正在等待的实例就可以获取锁,访问共享资源。2. 分布式锁实现的关键点在实现分布式锁时,通常会有一个中心节点(或者称为锁服务),所有需要获取锁的节点都需要向这个中心节点申请。当一个节点申请锁时,中心节点会检查当前是否有其他节点持有锁,如果没有,则将锁分配给申请的节点;如果有,则拒绝申请。当持有锁的节点完成操作后,会向中心节点归还锁,此时其他的节点可以再次申请锁。三、基于Redis的分布式锁1. Redis的基本介绍Redis是一个开源的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息代理。Redis 提供了多种命令和能力来支持实现分布式锁SETNX 命令:SETNX(Set if Not Exists)命令用于在 key 不存在时设置值。这是实现分布式锁的关键命令,因为它能确保在同一时间只有一个客户端能够获得锁。EXPIRE 命令:EXPIRE 命令用于为 key 设置过期时间。这对于避免死锁非常重要,因为即使某个客户端崩溃,锁也会在一定时间后自动释放。DEL 命令:DEL 命令用于删除 key。在释放锁时,需要使用此命令删除对应的 key。Lua 脚本:Redis 支持使用 Lua 脚本来执行一系列原子操作。这对于实现安全的分布式锁非常有用,因为它可以确保在释放锁时检查锁的持有者。RedLock 算法:Redis 官方推荐了一种名为 RedLock 的分布式锁算法。RedLock 是一种基于多个 Redis 实例的分布式锁算法,旨在提供更高的安全性和容错能力。一般,在实现Redis分布式锁时,不分开使用SETNX和EXPIRE命令,而是使用SETNX的拓展命令 SET NX EX示例: SET my_key my_value NX EX 10 # 设置键值对, 超时时间为10s。 如果my_key存在,则不进行任何操作2. Redis实现分布式锁的基本实现请求锁假设我们有一个 Redis 键 my_lock,用于表示锁的状态。当一个客户端想要获取锁时,它会尝试使用 SETNX 命令来设置这个键。SET my_lockunique_value> NX EX lock_timeout>如果命令返回 OK,则表示客户端成功获取了锁。如果返回 nil,则表示锁已被其他客户端持有。unique_value>: 一个唯一的值,比如 UUID,用于标识锁的持有者。NX: 只有当 my_lock 不存在时,才会设置该键。这确保了同一时间只有一个客户端能获得锁。EX lock_timeout>: 设置锁的过期时间,防止因客户端崩溃而导致的死锁。锁续期为了防止锁过早地因为过期而被释放,可以在锁快到期时进行续期操作。这可以通过定期检查锁的剩余时间,并在必要时使用 EXPIRE 命令来更新过期时间来实现。# 检查锁是否仍由当前客户端持有if redis.call(get, my_lock) ==unique_value> then # 续期锁 redis.call(EXPIRE, my_lock, new_lock_timeout>)end注意:上述代码是一个简化的 Lua 脚本示例,实际应用中可能需要更复杂的逻辑来处理续期操作。释放锁当客户端完成需要加锁保护的操作后,应该释放锁。为了确保只有锁的持有者才能释放锁,可以使用 Lua 脚本来执行释放操作。if redis.call(get, my_lock) ==unique_value> then return redis.call(del, my_lock)else return 0 -- 锁未被当前客户端持有,无法释放end这个 Lua 脚本首先检查锁是否仍由当前客户端持有,如果是,则删除 `my_lock` 键以释放锁。3. Redis分布式锁的使用场景Redis分布式锁可以用于所有需要在分布式环境中同步访问共享资源的场景。例如,电商秒杀活动中,为了防止超卖,可以使用Redis分布式锁来保证同一时刻只有一个请求可以操作库存。又如,在分布式计算中,为了防止重复计算,可以使用Redis分布式锁来保证同一时刻只有一个节点可以进行计算。4. Redis分布式锁的优点和缺点优点:性能高:由于Redis是基于内存的,因此Redis分布式锁的性能非常高。实现简单:Redis提供的命令可以很容易地实现分布式锁。缺点:不可重入:Redis分布式锁默认是不可重入的,如果需要可重入,需要额外的逻辑来实现。非阻塞:Redis分布式锁是非阻塞的,如果获取锁失败,需要自己进行重试。安全性:如果Redis服务器出现故障,可能会导致锁无法正常工作。四、其他分布式锁的实现方式1. 基于数据库的分布式锁数据库分布式锁是通过在数据库中创建一个锁表,表中包含锁的名称和锁的状态等信息。当一个节点需要获取锁时,它会在这个表中插入一条记录,如果插入成功,那么这个节点就获取到了锁。当节点使用完锁后,会删除这条记录,从而释放锁。这种方式的优点是实现简单,缺点是性能较低,且如果数据库出现故障,可能会影响到锁的功能。2. 基于Zookeeper的分布式锁Zookeeper是一个开源的分布式协调服务,它提供了一种高效且可靠的分布式锁实现方式。在Zookeeper中,可以创建一个临时节点作为锁,当一个节点需要获取锁时,它会尝试创建这个临时节点,如果创建成功,那么这个节点就获取到了锁。当节点使用完锁后,会删除这个临时节点,从而释放锁。如果节点崩溃,Zookeeper会自动删除这个临时节点,从而避免了死锁的问题。3. 基于Etcd的分布式锁Etcd是一个开源的分布式键值存储系统,它也提供了一种分布式锁的实现方式。Etcd的分布式锁是通过创建一个带有TTL(Time To Live)的键值对来实现的,当一个节点需要获取锁时,它会尝试创建这个键值对,如果创建成功,那么这个节点就获取到了锁。当节点使用完锁后,会删除这个键值对,从而释放锁。如果节点崩溃,Etcd会自动删除这个键值对,从而避免了死锁的问题。4. 各种实现方式的比较分布式锁类型 优点 缺点基于Redis 性能高、实现简单 不可重入、非阻塞基于数据库 易于实现,无需额外依赖 性能较差,数据库瓶颈基于Zookeeper 高性能,高可靠性,有顺序一致性保证 需要额外安装和维护Zookeeper集群基于Etcd 简单易用,高可用性,弹性扩展,有顺序一致性保证 需要额外安装和维护etcd集群在选择分布式锁的实现方式时,需要根据具体的应用场景和需求来决定。五、分布式锁的常见问题和解决方案1. 死锁问题问题:当一个客户端获取了锁,但由于某些原因(如程序崩溃、异常等)无法释放锁时,会导致其他客户端永远无法获取锁。解决方案:设置锁的过期时间。当锁的持有者未能在过期时间内执行完毕并释放锁时,锁将自动过期,从而允许其他客户端获取锁。2. 锁续命问题问题:如果一个操作需要的时间可能超过锁的过期时间,那么在操作执行过程中锁过期会导致其他客户端获取到锁,从而产生并发问题。解决方案:使用锁续命机制。在锁持有者执行操作期间,可以定期检查锁是否即将过期,并在适当的时候对锁进行续命,即重新设置锁的过期时间。3. 锁释放问题问题:为确保数据的一致性,只有锁的持有者才能释放锁。但在实际应用中,可能会出现误解锁的情况。解决方案:在设置锁时,为锁关联一个唯一的值(如UUID)。在释放锁时,先检查锁的值是否与当前客户端的值匹配,如果匹配则释放锁,否则不做任何操作。注意,锁持有人的判断和锁的释放应该在一个原子操作内完成。4. 锁的公平性问题问题:在高并发环境中,如果多个节点同时请求获取锁,可能会出现“饥饿”现象,即某些节点长时间无法获取到锁。解决方案:引入队列,将请求锁的节点按照顺序排队。例如,在Zookeeper中,可以使用顺序节点来实现公平锁。5. 锁的可重入性问题问题:在某些场景中,一个节点可能需要多次获取同一个锁,如果锁不支持重入,可能会导致死锁。解决方案:为锁添加一个拥有者的概念,只有锁的拥有者才能再次获取到锁。例如,在Redis中,可以将锁的值设置为节点的唯一标识,获取锁时检查锁的值是否为自己的标识。6. 锁的安全性问题问题:如果分布式锁的存储系统(如Redis、Zookeeper等)出现故障,可能会导致锁无法正常工作。解决方案:使用高可用的存储系统,如使用Redis集群或Zookeeper集群。另外,可以使用心跳机制来检测存储系统的状态,如果检测到故障,可以及时进行切换。 另外我们在日常开发中通常会用到各种API接口,比如查询用户IP归属地,手机号归属地,天气预报,万年历等,这时我们可以直接去接口盒子https://www.apihz.cn 查找需要的API即可。接口盒子有数百个免费API,而且采用集群化服务器部署,比一般的API服务商更加稳定。

  • 推荐一些好用的数据库管理工具合集

    1、DBeaver (首选)DBeaver是一款免费开源的跨平台数据库管理工具,基于Java开发,支持目前几乎所有的主流数据库,包括MySQL、PostgreSQL、SQLite、Oracle、SQL Server、DB2、Sybase、Teradata、MongoDB等。它具有直观的用户界面,支持SQL编辑、数据查看、数据编辑、元数据管理、数据导出导入、连接管理等功能。DBeaver的特点包括:多种数据库支持:支持几乎所有主流数据库系统的连接和管理多平台支持:可在Windows、macOS、Linux平台上运行完善的功能:提供SQL查询、数据导入导出、数据可视化、元数据管理等功能高度可定制:用户可以根据需要配置和定制界面和功能免费开源:DBeaver是基于开源协议发布的免费软件DBeaver的下载地址为:https://dbeaver.io/download/用户可以根据自己的操作系统选择适合的版本进行下载安装。2、NavicatNavicat是一款功能强大的数据库管理工具,支持多种数据库系统,包括MySQL、MariaDB、SQL Server、SQLite、PostgreSQL和Oracle等。它具有直观的用户界面、丰富的功能和灵活的数据处理能力,是许多开发人员和数据库管理员的首选工具之一。Navicat的特点包括:多数据库系统支持:支持多种主流数据库系统的连接和管理。直观的用户界面:用户友好的界面设计,易于使用。数据处理功能:具有强大的数据导入导出、数据同步和备份恢复功能,帮助用户管理数据库。数据建模和设计工具:提供数据建模和设计工具,帮助用户设计数据库结构。丰富的SQL编辑功能:支持强大的SQL查询和编辑功能。Navicat的下载地址为:https://www.navicat.com.cn/downloadNavicat 的缺点是需要付费才能使用,不过你可以尝试申请 JetBrains 的免费账号,当然Navicat提供了免费试用版本,用户可以先试用其功能,如果满意可以考虑购买其正式版本。3、DMExpress达梦数据库管理工具(DMExpress)是由达梦公司推出的一款专用于达梦数据库的管理工具。它提供了丰富的功能,包括数据库连接管理、SQL查询、数据可视化、性能监控、备份恢复等功能,帮助用户更轻松地管理和维护达梦数据库。DMExpress的下载地址为:https://www.dameng.com/download/index.html同样的,达梦官网提供了免费试用版本,用户可以先试用其功能,如果满意可以考虑购买其正式版本。4、Chat2DBChat2DB 是一款由阿里巴巴开源免费的多数据库客户端工具,支持 windows、mac 本地安装,也支持服务器端部署,web 网页访问。和传统的数据库客户端软件 Navicat、DBeaver 相比 Chat2DB 集成了 AIGC 的能力,能够将自然语言转换为 SQL,也可以将 SQL 转换为自然语言,可以给出研发人员 SQL 的优化建议,极大的提升人员的效率,是 AI 时代数据库研发人员的利器,未来即使不懂 SQL 的运营业务也可以使用快速查询业务数据、生成报表能力。项目地址:https://github.com/chat2db/Chat2DBChat2DB 支持的数据库连接有:MySQLPostgreSQLH2OracleSQLServerSQLiteMariaDBClickHouseDMPrestoDB2OceanBaseHiveKingBaseRedis和MongoDB得到部分支持,Hbase、Elasticsearch、openGauss、TiDB、InfluxDB将在未来得到支持。5、SQL StudioSQL Studio 是一款安全高效的数据库开发管理工具,让你从单一数据库可同时连接Oracle、PostgreSQL、MySQL、SQLite、SQL Server、DM(武汉达梦)、KingBase(人大金仓)、MongoDB(Beta)、Hadoop等。SQL Studio是一款安全系数极高的数据库管理软件,它对数据库常用的功能非常完整,包括SQL历史查询、导入导出、自动生成测试数据、自动生成SQL语句、数据对比等。6、其他MySQL Workbench:MySQL官方提供的数据库设计和管理工具,具有强大的建模、查询和管理功能。phpMyAdmin:一个基于Web的MySQL数据库管理工具,可通过Web浏览器管理MySQL数据库。pgAdmin:专为PostgreSQL设计的开源数据库管理工具,提供了全面的数据库管理功能。SQL Workbench/J:通用的SQL查询工具,支持多种数据库系统,包括MySQL、PostgreSQL、Microsoft SQL Server等。SQL Server Management Studio (SSMS):由Microsoft官方提供的SQL Server数据库管理工具,专为SQL Server数据库而设计。Oracle SQL Developer:由Oracle官方提供的数据库管理工具,主要用于Oracle数据库的开发和管理。Navicat for 金仓:针对金仓数据库(Kingbase)设计的数据库管理工具,支持SQL查询、数据编辑、数据库管理等功能。大连神舟数据库管理工具:专门为神舟数据库(ShenTong)设计的管理工具,提供了数据库管理和SQL查询功能。 另外我们在日常开发中通常会用到各种API接口,比如查询用户IP归属地,手机号归属地,天气预报,万年历等,这时我们可以直接去接口盒子https://www.apihz.cn 查找需要的API即可。接口盒子有数百个免费API,而且采用集群化服务器部署,比一般的API服务商更加稳定。

  • 国产数据库:目前最火的五款国产数据介绍

    随着互联网的高速发展,目前数据的存储越来越多,传统的数据库逐渐不能满足人们对海量数据、高效查询的需求,国产的数据库如雨后春笋一样,一个个冒了出来来解决我们高速科技发展的数据库瓶颈,今天就给大家聊一聊目前最火的五款国产数据库,大家一起来学习一下。1、TiDB??1.1 简介TiDB 是由PingCAP 公司研发设计的开源分布式 HTAP (Hybrid Transactional and Analytical Processing) 数据库,它结合了传统的关系型和非关系型数据库的最佳特性。TiDB 兼容 MySQL,支持无限的水平扩展,具备强一致性和高可用等特性。1.2 优点高度兼容MySQL:可以轻松从MySQL迁移至TiDB数据库水平弹性扩展:通过简单地增加新节点就可以实现TiDB的水平扩展,按需增加减少节点的方式可以节约不少成本分布式事务:完全支持标准的 ACID 事务。金融级别高可用:基于Raft的多数派选举协议可以提供金融级的 100% 数据强一致性保证,减少运维成本云原生SQL 数据库:可以同 Kubernetes 容器化技术深度耦合,支持公有云、私有云和混合云。安装部署、配置学习成本低、简单一站式 HTAP 解决方案:TiDB 作为典型的 OLTP 行存数据库,同时兼具强大的 OLAP 性能,配合 TiSpark,可提供一站式 HTAP解决方案,一份存储同时处理OLTP & OLAP(OLAP、OLTP的介绍和比较 )无需传统繁琐的 ETL 过程。1.3 缺点TiDB作为分布式数据库,对数据存储节点硬件要求比较高,SSD的硬盘必备不支持存储过程、分区和GBK,数据写入时TiDB压力比较大分布式部署对网络要求也非常高1.4 适用场景原业务的 MySQL 的业务遇到单机容量或者性能瓶颈大数据量下,MySQL 复杂查询很慢数据增长很快,接近单机处理的极限,不想分库分表或者不适合使用数据库中间件大数据量下,有高并发实时写入、实时查询、实时统计分析的需求有分布式事务、多数据中心的数据 100% 强一致性、auto-failover 的高可用的需求2、openGauss??2.1 简介openGauss是一款企业级开源关系型数据库,内核基于PostgreSQL,深度融合华为在数据库领域多年的研发经验,结合企业级场景需求,持续构建竞争力特性。2.2 优点高性能:提供了面向多核架构的并发控制技术结合鲲鹏硬件优化、 针对当前硬件多核NUMA的架构趋势,在内核关键结构上采用了Numa-Aware的数据结构、提供Sql-bypass智能快速引擎技术、针对频繁更新的业务场景,提供Ustore存储引擎。服务高可用:支持主备同步、异步、级联备机多种部署模式 、数据页CRC校验,损坏数据页通过备机自动修复、备机支持并行恢复,10秒内可升主提供服务、提供基于Paxos分布式一致性协议的日志复制及选主框架。高安全性:支持全密态计算,访问控制、加密认证、数据库审计、动态数据脱敏等安全特性。运维成本低:基于AI的智能参数调优和索引推荐、支持慢SQL诊断和对维度监控视图。开放性高:采用木兰宽松许可证协议,允许对代码自由调整、并提供伙伴认证,培训体系和培训课程。 2.3 缺点openGauss的一些插件未能正常编译使用,且编译比较复杂,需要很多依赖且版本偏固定,跨平台地编译难度较大。2.4 适用场景大规模交易型应用:适合大并发、大数据量、以联机事务处理为主的交易型应用。例如:电商、金融、O2O、电信CRM/计费等类型的应用。物联网数据存储:适合传感监控设备多、采样率高、数据存储为追加模型,操作和分析并重的场景。例如:制造业监控、智慧城市的延展、智能家居、车联网等物联网场景。3、OceanBase??3.1 简介OceanBase是蚂蚁集团完全自研的原生分布式关系数据库软件,深耕金融行业,在国内支持几十家银行、保险公司等金融客户的核心系统中稳定运行。它具备金融级高可用、HTAP混合负载、超大规模集群水平扩展和主流商业和开源数据库兼容地多个产品优势,在交易支付、会员系统和批处理系统中适用体验良好,极大的节省了成本,解决了传统数据库的性能瓶颈。3.2 优点高性能:OceanBase采用了读写分离的架构,把数据分为基线数据和增量数据。其中增量数据放在内存里(MemTable),基线数据放在SSD盘(SSTable)。对数据的修改都是增量数据,只操作内存低成本:OceanBase通过数据编码压缩技术实现高压缩,可以使用低端SSD存储,从而降低成本。高可用:数据存储采用多副本存储机制,少数副本故障不影响数据高可用性。强一致:数据多副本通过paxos协议同步事务日志,多数派成功事务才能提交。缺省情况下读、写操作都在主副本进行,从而保证强一致。可扩展:集群节点全对等,每个节点都具备计算和存储能力,无单点瓶颈。支持在线扩展和收缩。兼容性:兼容常用MySQL/ORACLE功能及MySQL/ORACLE前后台协议,业务修改极少量的代码就可以从MySQL/ORACLE迁移至OceanBase。3.3 缺点对Oracle兼容还不够完美,还只是兼容了标准SQL和一些常用函数(包括窗口函数)服务器配置较高,服务器内存至少32G以上搭建集群。硬件成本还是较高的3.4 适用场景OceanBase至今已成功应用于支付宝全部核心业务,也是各大银行首选的分布式关系型数据库4、华为云GaussDB??4.1 简介GaussDB是华为自研数据库品牌,是华为基于外部电信与金融政企经验、华为内部流程IT与云底座深耕10年以上的数据库内核研发优化能力,从客户对高可用、高性能、安全可靠等诉求出发,结合云的技术倾力打造的企业级分布式数据库。GaussDB是一个产品系列,在整体架构设计上,底层是分布式存储,中间是每个DB特有的数据结构,最外层则是各个生态的接口,体现了多模的设计理念。??具体产品包括:基于openGauss生态的分布式数据库GaussDB(for openGauss)基于MySQL生态的分布式数据库GaussDB(for MySQL),100%兼容MySQL4.2 优点良好生态系统:华为云为保护客户投资打造了自有生态,避免了从一个封闭体系走向另一个封闭体系。存算分离:保证了存储的稳定性和数据的安全性,同时通过重删、压缩、跨AZ等特性实现快速备份恢复,降低了可能造成的成本。高安全性:GaussDB支持访问控制、加密认证、数据库审计、动态数据脱敏、全密态等功能。全栈协同:通过鲲鹏生态,GaussDB是当前国内唯一能够做到全栈自主可控的国产品牌。4.3 适用场景金融、电信、政府等行业关键核心系统。5、达梦??5.1 简介达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统,简称DM。达梦数据库管理系统的最新版本是8.0版本,简称DM8。5.2 优点信创性好:对国产服务器和操作系统的兼容性好,达梦针对国产cpu,国产服务器、国产操作系统做了专门的适配,达梦数据库对中文的支持也非常好。运维成本低:达梦数据库安装相对要简单,针对国人习惯进行了优化,学习成本和运维工作量较低。操作简单:GUI界面做得非常简洁,大部分工作都可以通过鼠标在图形化界面上完成,同时还能生成命令预览。强大的数据迁移工具:达梦还提供了几乎所有数据库的迁移工具。跨平台:DM8 实现了平台无关性,支持 Windows 系列、Linux(2.4 及 2.4 以上内核)、UNIX、Kylin、AIX、Solaris 等主流操作系统。5.3 适用场景达梦数据库在公安、政务、信用、司法、审计、住建、国土、应急等领域应用非常广泛。 另外我们在日常开发中通常会用到各种API接口,比如查询用户IP归属地,手机号归属地,天气预报,万年历等,这时我们可以直接去接口盒子https://www.apihz.cn 查找需要的API即可。接口盒子有数百个免费API,而且采用集群化服务器部署,比一般的API服务商更加稳定。

  • MySQL删除表数据、清空表命令(truncate、drop、delete 区别)

    一、MySQL清空表数据三种方法1.1 清空表数据:truncatesql命令#清空多张表、库中所有表的数据truncate table table_name1,table_name2,...;#清空单张表的数据truncate table table_name;注意:truncate会删除表中的所有数据、释放空间,但是保留表结构只能操作表,不能与where一起使用truncate删除操作立即生效,原数据不放到rollback segment中,不能rollback,操作不触发triggertruncate删除数据后会释放表空间、重置Identity(标识列、自增字段),相当于自增列会被置为初始值,又重新从1开始记录、而非接着原来的id数truncate删除数据后不写服务器log,整体删除速度快1.2 删除表:dropsql命令drop table table_name;drop table if exists table_name;注意:drop会删除整个表,包括表结构和数据,释放空间立即执行,执行速度最快不可回滚1.3 删除/清空表数据:deletesql命令#删除部分数据delete from tb_name where clause;#清空表,仅删除数据、保留表结构,同时也不释放表空间delete from tb_name;注意:删除表中数据而不删除表结构,也不释放空间delete可以删除一行、多行、乃至整张表每次删除一行,都在事务日志中为所删除的每行记录一项,可回滚如果不加where条件,表示删除表中所有数据,仅删除数据、保留表结构,同时也不释放表空间MySQL、Mariadb、PostgreSQL删除表数据、清空表命令 都可用以上三种命令。二、使用原则使用原则总结如下:当你不需要该表时(删除数据和结构),用drop;当你仍要保留该表、仅删除所有数据表内容时,用truncate;当你要删除部分记录、且希望能回滚的话,用delete;在没有备份的情况下,谨慎使用drop、truncate。在实际应用中,要根据具体需求和场景选择合适的操作。三、truncate、drop、delete区别truncate、delete和drop都是用于删除数据或表的操作,但它们之间有一些关键的区别:操作类型:truncate:删除表中的所有数据,保留表结构,释放空间。它是一种DDL(数据定义语言)操作,执行速度较快。delete:删除表中的特定行,可以逐行删除,保留表结构,也不释放空间。它是一种DML(数据操作语言)操作,执行速度较慢。drop:删除整个表,包括表结构和数据,释放空间。它是一种DDL操作,但不同于truncate,它会释放表所占用的空间。数据删除方式:truncate:删除表中的所有数据,但不会删除表结构。适用于需要保留表结构的情况。delete:删除表中的特定数据,可以根据条件删除,表的结构和约束保持不变。适用于需要根据特定条件删除数据的情况。drop:删除整个表,包括表结构和数据。适用于不再需要表结构的情况。执行速度:drop > truncate > deletetruncate:执行速度较快,因为它一次性删除所有数据,过释放表的存储空间来删除数据,并将表重置为初始状态。delete:执行速度较慢,因为它需要逐行删除数据,并且会生成大量的事务日志,同时也不释放空间。drop:执行速度较快,因为它一次性删除整个表。回滚能力:truncate:不可回滚,一旦执行,数据将被永久删除、无法恢复。delete:可以回滚,使用ROLLBACK语句可以撤销删除操作。drop:不可回滚,一旦执行,表结构和数据都将被永久删除。触发器:truncate:不会触发触发器。delete:会触发触发器。drop:不会触发触发器,因为它是删除整个表。总结:如果您需要快速删除整个表中的数据,但保留表结构,可以选择truncate。如果您需要删除特定行的数据,可以根据条件删除,可以选择delete。如果您需要删除整个表,包括表结构和数据,可以选择drop。在实际应用中,要根据具体需求和场景选择合适的操作。 另外我们在日常开发中通常会用到各种API接口,比如查询用户IP归属地,手机号归属地,天气预报,万年历等,这时我们可以直接去接口盒子https://www.apihz.cn 查找需要的API即可。接口盒子有数百个免费API,而且采用集群化服务器部署,比一般的API服务商更加稳定。

  • 解决Python报错:ModuleNotFoundError: No module named ‘requests‘

    一、在Python编程中,requests 是一个非常流行的HTTP库,用于发送各种HTTP请求。然而,初学者和经验丰富的开发者都可能会遇到一个常见的错误:ModuleNotFoundError: No module named ‘requests’。本文将分析这个错误的原因,并提供详细的解决方案。二、可能的错误原因 这个错误通常发生在以下几种情况: 未安装requests库:这是最常见的原因。Python环境中没有安装requests模块。环境问题:如果你使用的是虚拟环境(如venv或conda环境),可能在当前激活的环境中没有安装requests。Python版本不兼容:虽然很少见,但某些版本的Python可能与requests库不兼容。错误的模块名:在导入时拼写错误,如Requsts或request。三、解决方案汇总3.1 安装requests库首先,我们需要确保已经安装了requests库。打开终端或命令提示符,然后运行以下命令之一:# 使用pip安装pip install requests# 如果你使用的是Python 3,可能需要使用pip3pip3 install requests3.2 检查环境如果你使用的是虚拟环境,请确保它已被激活,然后在该环境中安装requests。# 激活虚拟环境(示例为venv)source venv/bin/activate # Linux 或 macOSvenvScriptsactivate # Windows# 安装requestspip install requests3.3 检查Python版本确保Python版本与requests库兼容。requests库支持Python 2.7 和 3.4+。推荐使用Python 3。3.4 导入正确模块# 正确的导入方式import requests四、相关注意事项检查IDE或编辑器的环境:如果你在使用IDE(如PyCharm、VS Code)或其他编辑器,有时需要手动配置模块的解释器路径。确保你使用的是正确的解释器,并已在该解释器下安装了requests模块。更新模块版本:有时候旧版本的requests模块可能会出现问题。你可以尝试更新requests模块到最新版本,使用pip install --upgrade requests命令进行更新。检查系统环境变量:有时候系统的环境变量配置出错也会导致模块无法找到。你可以检查系统的PATH环境变量,确保Python安装路径和Python Scripts目录已正确配置。五、示例代码下面是一个使用requests库发送GET请求的简单示例:import requests# 目标URLurl = https://api.github.com# 发送GET请求response = requests.get(url)# 打印响应状态码和内容print(response.status_code)print(response.text) 另外我们在日常开发中通常会用到各种API接口,比如查询用户IP归属地,手机号归属地,天气预报,万年历等,这时我们可以直接去接口盒子https://www.apihz.cn 查找需要的API即可。接口盒子有数百个免费API,而且采用集群化服务器部署,比一般的API服务商更加稳定。

  • 国内无法拉取Docker镜像了?这些方法拯救你的Docker

    最近各大高校以及容器技术社区,由于众所周不知的原因, 纷纷关闭多个镜像加速站点。这极大地影响了工作效率和开发进度。面对这一困境,本文将为你介绍几种有效的解决方案,帮助你顺利拉取Docker镜像,继续你的开发工作。今天就介绍几个方法让拯救你的Docker方法1: 某些云镜像加速方法2: 使用Docker Hub并将镜像推送到阿里云自有仓库方法3:使用Github Action 构建docker镜像方法4: 部署DockerHub的代理方法5: 镜像仓库前缀替换一、某些云镜像加速这里某些云包括但不限于国内的几大云,XX云、腾讯云、华为云,使用的方法都大同小异,这里介绍华为云的用户镜像加速不可用腾讯云镜像加速器地址:https://mirror.ccs.tencentyun.com (已失效)中国科学技术大学:https://docker.mirrors.ustc.edu.cn (已失效)Docker官方镜像(中国区)镜像加速:https://registry.docker-cn.com (已失效)网易云镜像加速器地址:http://hub-mirror.c.163.com (已失效)南京大学镜像加速器地址:https://docker.nju.edu.cn (已失效)镜像加速可用镜像源华为云的镜像加速地址:XXX.mirror.swr.myhuaweicloud.comDaocloud 镜像加速器地址:https://docker.m.daocloud.io华为云镜像加速进入华为云搜索“容器镜像服务”或者 SWR ,进入控制台点击 “镜像资源”---> “镜像中心”---> 镜像加速器操作说明安装/升级容器引擎客户端推荐安装1.11.2以上版本的容器引擎客户端配置镜像加速器针对容器引擎客户端版本大于 1.11.2 的用户 以root用户登录容器引擎所在的虚拟机修改“/etc/docker/daemon.json”文件(如果没有,可以手动创建),在该文件内添加如下内容:vi /etc/docker/daemon.json?{ registry-mirrors: https://你的地址.mirror.swr.myhuaweicloud.com }?按“Esc”,输入:wq保存并退出。重启容器引擎配置完成后,执行systemctl restart docker重启容器引擎。 如果重启失败,则检查操作系统其他位置(如:/etc/sysconfig/docker、/etc/default/docker)是否配置了registry-mirrors参数,删除此参数并重启容器引擎即可。确认配置结果执行docker info,当Registry Mirrors字段的地址为加速器的地址时,说明加速器已经配置成功。某云镜像加速镜像加速器点击镜像工具--->镜像加速器二、使用Docker Hub并将镜像推送到自有仓库之前写过一篇文章: https://mp.weixin.qq.com/s/OrcBrtrZRwie3Q8eYVfl-A画个图说明:当然也可以打包下载到本地docker save busybox > busybox.tardocker load busybox.tar三、使用Github Action 构建docker镜像前置条件1.可以访问Github,国内环境github时而抽风体质,如果没有科学环境也可以使用 https://github.com/521xueweihan/GitHub520 +SwitchHosts 基本还是可以使用的(有的话就当我没说)。 2.有个github账号3.免费版Action 每天能使用1小时,每个月33小时(基本上够用)。参考博主悟空的日常:使用Github Action 构建docker镜像 http://wkdaily.cpolar.cn/archives/gc1.要有一个github账号没有账号就需要注册一个。 https://github.com2.fork项目DockerTarBuilderfork 叉子叉到自己的仓库中: https://github.com/wukongdaily/DockerTarBuilder3.点击 Actions点击Actions选项卡,再点击同意选择平台,再填入镜像名4.下载镜像点击 All workflows5.解压恢复镜像将下载好的压缩包上传到docker宿主机上。解压# unzip docker-images-tar.zipArchive: docker-images-tar.zip inflating: x86-64-images.tar.gz 再解压:#tar -zxvf x86-64-images.tar.gz# ls -lh alpine:latest-amd64.tar-rw------- 1 mysql 127 7.8M 7月 4 16:57 alpine:latest-amd64.tar?导入# docker load alpine:latest-amd64.tar?导入成功。# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEalpine latest a606584aa9aa 13 days ago 7.8 MB四、部署DockerHub的代理1.前置条件有个github账号有个cloudflare账号2.访问并fork如下项目到自己的仓库https://github.com/cmliu/CF-Workers-docker.io3.部署到cf的pages服务中3.1登录cloudflare并点击Worker和Pages点击 “Worker和Pages”再点 概述点击 “点击pages”再点 “连接到Git”3.2 点击pages连接GitHub容易登录之后3.3 选择刚才fork的仓库点击 保存并部署构建和部署继续处理项目4.访问并记录刚才部署的代理网站部署成功,点击访问站点。5.自定义域名这步不是必须因为cloudflare提供的域名太长不利于记忆,可以使用自有的域名,解析我这里配置的域名 dockerhub.xgss.net 再域名解析过来# ping dockerhub.xgss.netPING cf-workers-docker-io-1wu.pages.dev (172.66.47.123) 56(84) bytes of data.64 bytes from 172.66.47.123 (172.66.47.123): icmp_seq=1 ttl=53 time=988 ms64 bytes from 172.66.47.123 (172.66.47.123): icmp_seq=2 ttl=53 time=996 ms?6.修改配置文件sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json -EOF{ registry-mirrors: https://docker.fxxk.dedyn.io # 请替换为您自己的Worker自定义域名}EOFsudo systemctl daemon-reloadsudo systemctl restart docker?五、镜像仓库前缀替换如果由于网络限制,你无法直接访问某些镜像仓库,还可以尝试通过修改镜像仓库前缀来拉取镜像。一些国内的服务商提供了镜像仓库的镜像服务,你可以将原有的仓库前缀替换为对应的国内服务商的前缀。例如,将docker.io替换为docker.m.daocloud.io等。这种方法虽然可能不是所有镜像都适用,但能解决一部分镜像拉取问题。https://github.com/DaoCloud/public-image-mirror?tab=readme-ov-file#%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95总结以上就是拯救你的Docker 几种方法,希望本文介绍的这些方法能够帮助到你,让你的Docker之旅更加顺畅无阻。##########################分割线2024年12月19日新增自用的Docker地址注意地址要修改有些可能失效,请注意甄别。vi /etc/docker/daemon.json填写一下内容,注意按需修改{registry-mirrors: https://docker.m.daocloud.io, https://noohub.ru, https://huecker.io, https://dockerhub.timeweb.cloud, https://XXXXXXX.mirror.swr.myhuaweicloud.com, # 改成自己的地址 https://XXXXXXX.mirror.aliyuncs.com,# 改成自己的地址 https://docker.1panel.live, http://mirrors.ustc.edu.cn/, http://mirror.azure.cn/, https://hub.rat.dev/, https://docker.ckyl.me/, https://docker.chenby.cn, https://docker.hpcloud.cloud, https://docker.m.daocloud.io }加载配置,并重启systemctl daemon-reloadsystemctl restart dockerdocker info 另外我们在日常开发中通常会用到各种API接口,比如查询用户IP归属地,手机号归属地,天气预报,万年历等,这时我们可以直接去接口盒子https://www.apihz.cn 查找需要的API即可。接口盒子有数百个免费API,而且采用集群化服务器部署,比一般的API服务商更加稳定。

  • 检查指定网站SSL证书信息免费API接口教程

    接口简介: 检查指定网站SSL证书信息。 请求地址: https://cn.apihz.cn/api/wangzhan/sslq.php 请求方式: POST或GET。 请求参数: 【名称】【参数】【必填】【说明】 【用户ID】【id】【是】【用户中心的数字ID,例:id=10000000】 【用户KEY】【key】【是】【用户中心通讯秘钥,例:key=15he5h15ty854j5sr152hs2】 【域名网站】【domain】【是】【要查询的域名或网址,例:url=www.apihz.cn】 返回参数: 【名称】【参数】【说明】 【状态码】【code】【200成功,400错误】 【消息内容】【msg】【信息提示。】 【查询网址】【url】【查询网址。】 【​主体信息】【subject】【证书持有者信息。】 【​颁发者】【issuer】【证书颁发机构。】 【证书时间】【validity】【证书生效,失效,剩余时间。】 【密钥信息】【key_info】【公钥算法和长度,签名算法。】 【​证书指纹】【fingerprints】【各类加密指纹。】 【​证书元数据】【serial_number】【证书序列号。】 【证书元数据】【version】【证书格式版本。】 【证书元数据】【is_self_signed】【是否自签名证书。】 【主题备用名】【extensions】【保护的域名,ip,邮件,url,其他标识符,秘钥使用限制,基础约束,扩展秘钥用途,公钥标识符,颁发机构秘钥ID,证书策略等。】 【原始数据】【raw_data】【原始完整证书数据,可自行提取。】 GET请求示例: https://cn.apihz.cn/api/wangzhan/sslq.php?id=88888888&key=88888888&url=www.apihz.cn 注意:示例里的ID与KEY为公共ID与KEY,共享每分钟调用频次限制,接口本身免费,请使用自己的ID与KEY,独享每分钟调用频次。每日调用无上限。 POST请求示例: 请根据开发语言自行POST。 返回数据示例: 示例:{"code":400,"msg":"通讯秘钥错误。"} 示例: { "code": 200, "url": "https://www.apihz.cn", "subject": { "commonName": "*.apihz.cn" }, "issuer": { "countryName": "GB", "stateOrProvinceName": "Greater Manchester", "localityName": "Salford", "organizationName": "Sectigo Limited", "commonName": "Sectigo RSA Domain Validation Secure Server CA" }, "validity": { "valid_from": "2025-04-22 08:00:00", "valid_to": "2026-05-24 07:59:59", "days_remaining": 341 }, "key_info": { "public_key_algorithm": "RSA", "public_key_bits": 2048, "signature_algorithm": "RSA-SHA256" }, "fingerprints": { "sha1": "C1284B57C8987DDD775F944E6488DE085FAD3236", "sha256": "836B92EFB2E23B47ED30883092A2624CF0D10B0CBEE190B7DE706376732EC38D", "md5": "6F7598958C4059F686691A02BB979197" }, "serial_number": "7E04A7CC73CA900155E70309776BDA64", "version": 2, "is_self_signed": "no", "extensions": { "subject_alt_names": { "dns": [ "*.apihz.cn", "apihz.cn"], "ip": [], "email": [], "uri": [], "other": [] }, "key_usage": "Digital Signature, Key Encipherment", "basic_constraints": "CA:FALSE", "extended_key_usage": "TLS Web Server Authentication, TLS Web Client Authentication", "subject_key_identifier": "DC:54:25:68:FD:7A:19:5C:19:5C:CE:E0:36:4F:3B:6C:A9:89:42:D7", "authority_key_identifier": "keyid:8D:8C:5E:C4:54:AD:8A:E1:77:E9:9B:F9:9B:05:E1:B8:01:8D:61:E1 ", "certificate_policies": "Policy: 1.3.6.1.4.1.6449.1.2.2.7 CPS: https://sectigo.com/CPS Policy: 2.23.140.1.2.1 " }, "raw_data": { "name": "/CN=*.apihz.cn", "subject": { "commonName": "*.apihz.cn" }, "hash": "f980e70e", "issuer": { "countryName": "GB", "stateOrProvinceName": "Greater Manchester", "localityName": "Salford", "organizationName": "Sectigo Limited", "commonName": "Sectigo RSA Domain Validation Secure Server CA" }, "version": 2, "serialNumber": "167506900017118161225706514705868905060", "serialNumberHex": "7E04A7CC73CA900155E70309776BDA64", "validFrom": "250422000000Z", "validTo": "260523235959Z", "validFrom_time_t": 1745280000, "validTo_time_t": 1779580799, "signatureTypeSN": "RSA-SHA256", "signatureTypeLN": "sha256WithRSAEncryption", "signatureTypeNID": 668, "purposes": { "1": [ true, false, "SSL client"], "2": [ true, false, "SSL server"], "3": [ true, false, "Netscape SSL server"], "4": [ false, false, "S/MIME signing"], "5": [ false, false, "S/MIME encryption"], "6": [ false, false, "CRL signing"], "7": [ true, true, "Any Purpose"], "8": [ true, false, "OCSP helper"], "9": [ false, false, "Time Stamp signing"] }, "extensions": { "authorityKeyIdentifier": "keyid:8D:8C:5E:C4:54:AD:8A:E1:77:E9:9B:F9:9B:05:E1:B8:01:8D:61:E1 ", "subjectKeyIdentifier": "DC:54:25:68:FD:7A:19:5C:19:5C:CE:E0:36:4F:3B:6C:A9:89:42:D7", "keyUsage": "Digital Signature, Key Encipherment", "basicConstraints": "CA:FALSE", "extendedKeyUsage": "TLS Web Server Authentication, TLS Web Client Authentication", "certificatePolicies": "Policy: 1.3.6.1.4.1.6449.1.2.2.7 CPS: https://sectigo.com/CPS Policy: 2.23.140.1.2.1 ", "authorityInfoAccess": "CA Issuers - URI:http://crt.sectigo.com/SectigoRSADomainValidationSecureServerCA.crt OCSP - URI:http://ocsp.sectigo.com ", "subjectAltName": "DNS:*.apihz.cn, DNS:apihz.cn", "ct_precert_scts": "Signed Certificate Timestamp: Version : v1(0) Log ID : 96:97:64:BF:55:58:97:AD:F7:43:87:68:37:08:42:77: E9:F0:3A:D5:F6:A4:F3:36:6E:46:A4:3F:0F:CA:A9:C6 Timestamp : Apr 22 05:25:28.468 2025 GMT Extensions: none Signature : ecdsa-with-SHA256 30:44:02:20:7D:9D:23:11:FF:74:6B:08:4C:0D:1C:3D: 5F:B7:A6:56:57:04:D3:F1:4F:5F:F8:E4:D1:DD:FC:C4: 7D:68:9D:6F:02:20:0B:7C:B6:93:49:FA:8B:E0:D1:8F: 66:AD:B4:66:A7:AA:F7:4B:C1:3F:DE:B3:39:6D:94:1F: 22:4A:1B:58:BF:3A Signed Certificate Timestamp: Version : v1(0) Log ID : 19:86:D4:C7:28:AA:6F:FE:BA:03:6F:78:2A:4D:01:91: AA:CE:2D:72:31:0F:AE:CE:5D:70:41:2D:25:4C:C7:D4 Timestamp : Apr 22 05:25:28.435 2025 GMT Extensions: none Signature : ecdsa-with-SHA256 30:45:02:20:7A:DF:C2:84:FE:79:AE:A9:5F:43:F3:A1: 2A:34:0A:56:98:A3:98:37:63:65:81:50:2E:31:79:8E: B1:E6:E5:2E:02:21:00:80:2B:70:AD:6C:32:A3:C6:B7: FA:82:A5:E0:C9:71:8F:D5:12:23:85:4A:71:69:2F:2E: 7A:AB:A3:78:B9:6C:6B Signed Certificate Timestamp: Version : v1(0) Log ID : 0E:57:94:BC:F3:AE:A9:3E:33:1B:2C:99:07:B3:F7:90: DF:9B:C2:3D:71:32:25:DD:21:A9:25:AC:61:C5:4E:21 Timestamp : Apr 22 05:25:28.436 2025 GMT Extensions: none Signature : ecdsa-with-SHA256 30:46:02:21:00:AC:65:D8:EA:4F:50:65:54:60:62:03: 60:48:CB:96:FA:66:91:CE:29:7B:AC:CD:11:FD:37:99: 0D:3E:2F:88:91:02:21:00:8D:71:94:B6:A1:B7:1E:EB: 36:DC:EB:AE:01:5F:B1:30:0F:93:0F:09:AE:91:75:66: D1:D8:B8:45:C7:B1:7F:13" } } } 参考资料(版权): https://www.apihz.cn/api/wangzhansslq.html

  • 微信公众号文章内容提取免费API接口教程

    接口简介: 提取指定微信公众号文章的内容。普通用户仅支持平台节点解析,成功率偏低,炫钻用户采用双模式解析,成功率偏高。如果解析失败,请多次尝试,系统自动更换线路。郑重声明:本接口仅供测试调试等合法化场景使用,未经作者授权请勿转载滥用。 请求地址: https://cn.apihz.cn/api/caiji/wx.php 请求方式: POST或GET。 请求参数: 【名称】【参数】【必填】【说明】 【用户ID】【id】【是】【用户中心的数字ID,例:id=10000000】 【用户KEY】【key】【是】【用户中心通讯秘钥,例:key=15he5h15ty854j5sr152hs2】 【文章URL】【url】【是】【公众号文章地址,如果链接包含&符号,则将&替换为(@),要加括号,例:url=https://mp.weixin.qq.com/s/SswrdNgHoXuUPK4khJBWOg】 返回参数: 【名称】【参数】【说明】 【状态码】【code】【200成功,400错误。普通用户仅支持平台节点解析,成功率偏低,炫钻用户采用双模式解析,成功率偏高。如果解析失败,请多次尝试,系统自动更换线路。】 【信息提示】【msg】【信息提示。】 【作者】【name】【作者。】 【文章标题】【title】【文章标题。】 【封面】【cover】【封面。】 【文章内容】【content】【文章内容。】 GET请求示例: https://cn.apihz.cn/api/caiji/wx.php?id=88888888&key=88888888&url=https://mp.weixin.qq.com/s/SswrdNgHoXuUPK4khJBWOg 注意:示例里的ID与KEY为公共ID与KEY,共享每分钟调用频次限制,接口本身免费,请使用自己的ID与KEY,独享每分钟调用频次。每日调用无上限。 POST请求示例: 请根据开发语言自行POST。 返回数据示例: 示例:{"code":400,"msg":"通讯秘钥错误。"} 示例: { "code": 200, "td": "节点模式", "name": "绵阳市妇幼保健院 l 市儿童医院", "title": "迟迟怀不上,到底是谁“不行”?", "cover": "http://mmecoa.qpic.cn/mmecoa_jpg/6LezMotm3Qh2DVWmW1TwvkRpdHEFNaxliatU7ibxUuEB8Z3f35S9EcqATuQoZCzjpqJgGwdSC1lf6oGdToBnu3cQ/0?wx_fmt=jpeg", "content": "老公定期交作业,肚子依然没动静...认真备孕一年还是没怀上...小时候以为亲嘴就会怀孕长大后发现事情并非如此简单有人小心避孕,有人却久备不孕备孕路上,总是几家欢喜几家愁!当尝试怀孕却迟迟未能成功时,夫妻俩常常会陷入焦虑和自我怀疑:“是我的问题?”“是对方不行?”“我们,不孕不育了?!”事实上,由于长期熬夜、久坐不运动、饮食不健康等诸多因素,近年来中国的不孕不育症发病率从20年前的2.5%—3%攀升到12.5%—15%,累计人数超过6000万,不孕不育越发地影响到夫妻的家庭发展计划。怎样才算是不孕不育?夫妻双方正常性生活一年未避孕未孕就可以诊断为不孕症。什么原因会引起不孕不育?据统计:不孕不育原因中,女性因素约占40%,男性因素约占30%-40%,双方共同因素或不明原因约占20%-30%。△男性因素:①精子质量问题:少精、弱精、畸形精子症等会影响受孕。②性功能障碍:勃起障碍、射精障碍等可能导致精子无法顺利进入女性体内。③激素异常:睾酮水平低、甲状腺功能异常等可能影响精子生成。△女性因素:①排卵障碍:多囊卵巢综合征、卵巢早衰、甲状腺功能异常等都会影响排卵。②输卵管问题:输卵管堵塞、积水或炎症会影响精卵结合。③子宫问题:子宫内膜异位症、子宫肌瘤、宫腔粘连等可能影响胚胎着床。△双方共同因素:免疫因素:某些情况下,女性的免疫系统可能错误地攻击精子或胚胎。遗传或染色体异常:某些基因问题可能影响生育能力。不明原因不孕:约10%-20%的夫妻检查后找不到明确原因,但仍可能通过辅助生殖技术(如试管婴儿)成功怀孕。如何科学应对?△共同检查:不孕不育是夫妻双方的问题,建议夫妻一起到医院进行系统检查,而不是互相指责。△调整生活方式:戒烟戒酒、规律作息、均衡饮食、适度运动,有助于提高生育能力。△心理调节:长期焦虑可能影响激素水平,放松心态很重要。△医学干预:根据检查结果,医生可能会建议促排卵、人工授精(IUI)或试管婴儿(IVF)等辅助生殖技术。"怀不上"并不是某一方的错,生育是两个人的事。与其互相埋怨,不如共同面对,科学就医,找到最适合的解决方案。??????6月23日绵阳市妇幼保健院(市儿童医院)生殖医学中心帮您请来了大专家!为您一对一分析讲解不孕不育的原因和治疗方法,提供专业、权威的诊疗服务,确保每一个想要拥有宝宝的家庭都能得到最准确、最有效的治疗方案。坐诊时间:6月23日(星期一)下午14:00-17:30坐诊地点:花园院区2号楼5楼咨询电话:0812-6391622【妇幼健康科普】作? ? ?者 | 杨? 李文字编辑 | 杜明君美术编辑?| 李? 雪审? ? ?核 | 张? 昕往期回顾分享、收藏、点赞、在看↓↓↓我们懂医也懂你~" } 参考资料(版权): https://www.apihz.cn/api/caijiwx.html

  • 火车票余票信息查询免费API接口教程

    接口简介: 查询指定日期,出发地到目的地火车票余票等信息。普通用户采用接口本地线路调用,成功率无保障。彩钻和炫钻用户采用本地+代理双模式调用,成功率超高。调用该接口后可根据该接口返回的信息继续调用查询票价接口和车次全程站点及停留时间查询接口。 请求地址: https://cn.apihz.cn/api/12306/api.php 请求方式: POST或GET。 请求参数: 【名称】【参数】【必填】【说明】 【用户ID】【id】【是】【用户中心的数字ID,例:id=10000000】 【用户KEY】【key】【是】【用户中心通讯秘钥,例:key=15he5h15ty854j5sr152hs2】 【出发站点】【add】【是】【出发地或出发车站名称,例:add=绵阳】 【目的站点】【end】【是】【目的地或目的车站名称,例:end=上海】 【出发日期-年】【y】【是】【出发日期-年,例:y=2025】 【出发日期-月】【m】【是】【出发日期-月,例:m=6】 【出发日期-日】【d】【是】【出发日期-日,例:d=30】 【cookie】【ck】【否】【不传该参数则使用平台提供的cookie,如果多次查询失败可能是平台cookie失效,可传自己的cookie,参照图片教程:https://down.erguanmingmin.com/api/img/12306ck.png,浏览器访问12306官网,打开调试模式,然后任意查询火车票,找到该链接https://kyfw.12306.cn/otn/leftTicket/queryU,取cookie里面的JSESSIONID值,只需传等号后面的字符串即可。ck=0EC5DA0C04CB6793F9C293EBF28B485B】 返回参数: 【名称】【参数】【说明】 【状态码】【code】【200成功,400错误。普通用户采用接口本地线路调用,成功率无保障。彩钻和炫钻用户采用本地+代理双模式调用,成功率超高。查询成功后的信息有60秒缓存期。】 【提示信息】【msg】【提示信息】 【车组编号】【train_number】【车组编号】 【车次编号】【train_order】【车次编号】 【出发站点索引】【depart_index】【出发站点索引】 【目的站点索引】【arrive_index】【目的站点索引】 【出发站点名称】【depart_name】【出发站点名称】 【目的站点名称】【arrive_name】【目的站点名称】 【出发站点归属市】【depart_city】【出发站点归属市】 【目的站点归属市】【arrive_city】【目的站点归属市】 【出发站点代码】【depart_code】【出发站点代码】 【目的站点代码】【arrive_code】【目的站点代码】 【出发时间】【depart_time】【出发时间】 【目的时间】【arrive_time】【目的时间】 【总计耗时】【duration】【总计耗时】 【座位参数】【seatcode】【座位参数】 【出发日期】【date】【出发日期】 【票量数据集】【seats】【票量数据集】 【座位等级】【seats.type】【座位等级】 【座位余票】【seats.stock】【座位余票,-1代表有票,票量充足。0代表无票。大于0代表余票数量,票量紧张。】 GET请求示例: https://cn.apihz.cn/api/12306/api.php?id=88888888&key=88888888&add=绵阳&end=上海&y=2025&m=6&d=30&ck= 注意:示例里的ID与KEY为公共ID与KEY,共享每分钟调用频次限制,接口本身免费,请使用自己的ID与KEY,独享每分钟调用频次。每日调用无上限。 POST请求示例: 请根据开发语言自行POST。 返回数据示例: 示例:{"code":400,"msg":"通讯秘钥错误。"} 示例: [{ "train_number": "G3286", "train_order": "76000G328609", "depart_index": "04", "arrive_index": "24", "depart_name": "绵阳", "arrive_name": "上海虹桥", "depart_city": "绵阳", "arrive_city": "上海", "depart_code": "MYW", "arrive_code": "AOH", "depart_time": "08:32", "arrive_time": "19:42", "duration": "11:10", "seatcode": "9MO", "date": "2025-06-30", "seats": [{ "type": "商务座(特等座)", "stock": 3 }, { "type": "一等座", "stock": 7 }, { "type": "二等座(二等包座)", "stock": -1 }, { "type": "高级软卧", "stock": 0 }, { "type": "软卧(动卧一等卧)", "stock": 0 }, { "type": "硬卧(二等卧)", "stock": 0 }, { "type": "软座", "stock": 0 }, { "type": "硬座", "stock": 0 }, { "type": "无座", "stock": 0 }, { "type": "优选一等座", "stock": 0 }] }, { "train_number": "G3290", "train_order": "77000G32900D", "depart_index": "06", "arrive_index": "29", "depart_name": "绵阳", "arrive_name": "上海虹桥", "depart_city": "绵阳", "arrive_city": "上海", "depart_code": "MYW", "arrive_code": "AOH", "depart_time": "11:21", "arrive_time": "22:47", "duration": "11:26", "seatcode": "9MO", "date": "2025-06-30", "seats": [{ "type": "商务座(特等座)", "stock": 0 }, { "type": "一等座", "stock": -1 }, { "type": "二等座(二等包座)", "stock": -1 }, { "type": "高级软卧", "stock": 0 }, { "type": "软卧(动卧一等卧)", "stock": 0 }, { "type": "硬卧(二等卧)", "stock": 0 }, { "type": "软座", "stock": 0 }, { "type": "硬座", "stock": 0 }, { "type": "无座", "stock": 0 }, { "type": "优选一等座", "stock": 0 }] }, { "train_number": "G1976", "train_order": "77000G19760N", "depart_index": "05", "arrive_index": "25", "depart_name": "绵阳", "arrive_name": "上海虹桥", "depart_city": "绵阳", "arrive_city": "上海", "depart_code": "MYW", "arrive_code": "AOH", "depart_time": "11:46", "arrive_time": "22:32", "duration": "10:46", "seatcode": "9MO", "date": "2025-06-30", "seats": [{ "type": "商务座(特等座)", "stock": 2 }, { "type": "一等座", "stock": 13 }, { "type": "二等座(二等包座)", "stock": -1 }, { "type": "高级软卧", "stock": 0 }, { "type": "软卧(动卧一等卧)", "stock": 0 }, { "type": "硬卧(二等卧)", "stock": 0 }, { "type": "软座", "stock": 0 }, { "type": "硬座", "stock": 0 }, { "type": "无座", "stock": 0 }, { "type": "优选一等座", "stock": 0 }] }, { "train_number": "K284", "train_order": "760000K2840I", "depart_index": "03", "arrive_index": "25", "depart_name": "绵阳", "arrive_name": "上海", "depart_city": "绵阳", "arrive_city": "上海", "depart_code": "MYW", "arrive_code": "SHH", "depart_time": "20:28", "arrive_time": "06:53", "duration": "34:25", "seatcode": "1431", "date": "2025-06-30", "seats": [{ "type": "商务座(特等座)", "stock": 0 }, { "type": "一等座", "stock": 0 }, { "type": "二等座(二等包座)", "stock": 0 }, { "type": "高级软卧", "stock": 0 }, { "type": "软卧(动卧一等卧)", "stock": 0 }, { "type": "硬卧(二等卧)", "stock": 0 }, { "type": "软座", "stock": 0 }, { "type": "硬座", "stock": 0 }, { "type": "无座", "stock": 0 }, { "type": "优选一等座", "stock": 0 }] }, { "train_number": "K352", "train_order": "760000K3520V", "depart_index": "03", "arrive_index": "25", "depart_name": "绵阳", "arrive_name": "上海松江", "depart_city": "绵阳", "arrive_city": "上海", "depart_code": "MYW", "arrive_code": "IMH", "depart_time": "21:23", "arrive_time": "07:45", "duration": "34:22", "seatcode": "3411", "date": "2025-06-30", "seats": [{ "type": "商务座(特等座)", "stock": 0 }, { "type": "一等座", "stock": 0 }, { "type": "二等座(二等包座)", "stock": 0 }, { "type": "高级软卧", "stock": 0 }, { "type": "软卧(动卧一等卧)", "stock": 0 }, { "type": "硬卧(二等卧)", "stock": 0 }, { "type": "软座", "stock": 0 }, { "type": "硬座", "stock": 19 }, { "type": "无座", "stock": 0 }, { "type": "优选一等座", "stock": 0 }] }] 参考资料(版权): https://www.apihz.cn/api/12306api.html

  • 火车票票价查询免费API接口教程

    接口简介: 火车票票价查询,调用该接口必须先调用火车票余票信息查询接口,根据余票查询接口返回的数据来查询票价。可作为余票查询的补充查询。 请求地址: https://cn.apihz.cn/api/12306/api2.php 请求方式: POST或GET。 请求参数: 【名称】【参数】【必填】【说明】 【用户ID】【id】【是】【用户中心的数字ID,例:id=10000000】 【用户KEY】【key】【是】【用户中心通讯秘钥,例:key=15he5h15ty854j5sr152hs2】 【车次编号】【train_order】【是】【车次编号,查询余票接口返回的车次唯一编号。例:train_order=76000G328609】 【出发站点索引】【depart_index】【是】【出发站点索引,查询余票接口返回的出发站点索引。例:depart_index=04】 【目的站点索引】【arrive_index】【是】【目的站点索引,查询余票接口返回的目的站点索引。例:arrive_index=24】 【座位参数】【seatcode】【是】【座位参数,查询余票接口返回的座位参数。例:seatcode=9MO】 【出发日期-年】【y】【是】【出发日期-年,与查询余票接口返回的车次对应,例:y=2025】 【出发日期-月】【m】【是】【出发日期-月,与查询余票接口返回的车次对应,例:m=6】 【出发日期-日】【d】【是】【出发日期-日,与查询余票接口返回的车次对应,例:d=30】 【cookie】【ck】【否】【不传该参数则使用平台提供的cookie,如果多次查询失败可能是平台cookie失效,可传自己的cookie,参照图片教程:https://down.erguanmingmin.com/api/img/12306ck.png,浏览器访问12306官网,打开调试模式,然后任意查询火车票,找到该链接https://kyfw.12306.cn/otn/leftTicket/queryU,取cookie里面的JSESSIONID值,只需传等号后面的字符串即可。ck=0EC5DA0C04CB6793F9C293EBF28B485B】 返回参数: 【名称】【参数】【说明】 【状态码】【code】【200成功,400错误。普通用户采用接口本地线路调用,成功率无保障。彩钻和炫钻用户采用本地+代理双模式调用,成功率超高。查询成功后的信息有60秒缓存期。】 【提示信息】【msg】【提示信息】 【车次编号】【train_order】【车次唯一编号】 【特等座】【tdz】【商务座(特等座)票价】 【一等座】【ydz】【一等座票价】 【二等座】【edz】【二等座(二等包座)票价】 【高级软卧】【rws】【高级软卧票价】 【软卧】【rw】【软卧(动卧一等卧)票价】 【硬卧】【yw】【硬卧(二等卧)票价】 【软座】【rz】【软座票价】 【硬座】【yz】【硬座票价】 【无座】【wz】【无座票价】 【优选一等座】【ydzs】【优选一等座票价】 GET请求示例: https://cn.apihz.cn/api/12306/api2.php?id=88888888&key=88888888&y=2025&m=6&d=30&train_order=76000G328609&depart_index=04&arrive_index=24&seatcode=9MO&ck= 注意:示例里的ID与KEY为公共ID与KEY,共享每分钟调用频次限制,接口本身免费,请使用自己的ID与KEY,独享每分钟调用频次。每日调用无上限。 POST请求示例: 请根据开发语言自行POST。 返回数据示例: 示例:{"code":400,"msg":"通讯秘钥错误。"} 示例: { "code": 200, "train_order": "76000G328609", "tdz": "¥2777.5", "ydz": "¥1426.5", "edz": "¥894.0", "rws": null, "rw": null, "yw": null, "rz": null, "yz": null, "wz": "¥894.0", "ydzs": null } 参考资料(版权): https://www.apihz.cn/api/12306api2.html

  • 火车车次经停站点查询免费API接口教程

    接口简介: 火车车次经停站点查询,调用该接口必须先调用火车票余票信息查询接口,根据余票查询接口返回的数据来查询车次经停站点。可作为余票查询的补充查询。 请求地址: https://cn.apihz.cn/api/12306/api3.php 请求方式: POST或GET。 请求参数: 【名称】【参数】【必填】【说明】 【用户ID】【id】【是】【用户中心的数字ID,例:id=10000000】 【用户KEY】【key】【是】【用户中心通讯秘钥,例:key=15he5h15ty854j5sr152hs2】 【车次编号】【train_order】【是】【车次编号,查询余票接口返回的车次唯一编号。例:train_order=76000G328609】 【cookie】【ck】【否】【不传该参数则使用平台提供的cookie,如果多次查询失败可能是平台cookie失效,可传自己的cookie,参照图片教程:https://down.erguanmingmin.com/api/img/12306ck.png,浏览器访问12306官网,打开调试模式,然后任意查询火车票,找到该链接https://kyfw.12306.cn/otn/leftTicket/queryU,取cookie里面的JSESSIONID值,只需传等号后面的字符串即可。ck=0EC5DA0C04CB6793F9C293EBF28B485B】 返回参数: 【名称】【参数】【说明】 【状态码】【code】【200成功,400错误。普通用户采用接口本地线路调用,成功率无保障。彩钻和炫钻用户采用本地+代理双模式调用,成功率超高。查询成功后的信息有60秒缓存期。】 【提示信息】【msg】【提示信息】 【车次编号】【train_order】【车次唯一编号】 【数据集】【data】【数据集】 【车次号】【data.station_train_code】【车次号,第一站字段】 【速度类型】【data.train_class_name】【列车速度类型,第一站字段】 【始发站名称】【data.start_station_name】【始发站名称,第一站字段】 【​终点站名称】【data.end_station_name】【​终点站名称,第一站字段】 【未知字段】【data.service_type】【可能是空调车字段,第一站字段】 【站点序号】【data.station_no】【站点序号】 【​当前站名】【data.station_name】【​当前站名】 【​到达时间】【data.arrive_time】【​到达时间】 【​发车时间】【data.start_time】【​发车时间】 【停靠时长】【data.stopover_time】【停靠时长】 【是否国内站】【data.isChina】【是否国内站】 【国家代码】【data.country_code】【国家代码】 【国家名称】【data.country_name】【国家名称】 【未知字段】【data.isEnabled】【未知字段】 GET请求示例: https://cn.apihz.cn/api/12306/api3.php?id=88888888&key=88888888&y=2025&m=6&d=30&train_order=76000G328609&ck= 注意:示例里的ID与KEY为公共ID与KEY,共享每分钟调用频次限制,接口本身免费,请使用自己的ID与KEY,独享每分钟调用频次。每日调用无上限。 POST请求示例: 请根据开发语言自行POST。 返回数据示例: 示例:{"code":400,"msg":"通讯秘钥错误。"} 示例: { "code": 200, "train_order": "76000G328609", "datas": [{ "station_name": "成都东", "train_class_name": "高速", "isChina": "1", "service_type": "2", "end_station_name": "上海虹桥", "stopover_time": "----", "country_code": "", "isEnabled": false, "country_name": "", "arrive_time": "----", "start_station_name": "成都东", "station_train_code": "G3286", "start_time": "07:41", "station_no": "01" }, { "arrive_time": "07:52", "station_name": "新都东", "isChina": "1", "start_time": "07:54", "stopover_time": "2分钟", "station_no": "02", "country_code": "", "country_name": "", "isEnabled": false }, { "arrive_time": "08:11", "station_name": "德阳", "isChina": "1", "start_time": "08:13", "stopover_time": "2分钟", "station_no": "03", "country_code": "", "country_name": "", "isEnabled": false }, { "arrive_time": "08:30", "station_name": "绵阳", "isChina": "1", "start_time": "08:32", "stopover_time": "2分钟", "station_no": "04", "country_code": "", "country_name": "", "isEnabled": false }, { "arrive_time": "09:22", "station_name": "广元", "isChina": "1", "start_time": "09:28", "stopover_time": "6分钟", "station_no": "05", "country_code": "", "country_name": "", "isEnabled": false }, { "arrive_time": "10:14", "station_name": "汉中", "isChina": "1", "start_time": "10:16", "stopover_time": "2分钟", "station_no": "06", "country_code": "", "country_name": "", "isEnabled": false }, { "arrive_time": "11:11", "station_name": "鄠邑", "isChina": "1", "start_time": "11:13", "stopover_time": "2分钟", "station_no": "07", "country_code": "", "country_name": "", "isEnabled": false }, { "arrive_time": "11:34", "station_name": "西安北", "isChina": "1", "start_time": "11:40", "stopover_time": "6分钟", "station_no": "08", "country_code": "", "country_name": "", "isEnabled": false }, { "arrive_time": "12:08", "station_name": "华山北", "isChina": "1", "start_time": "12:11", "stopover_time": "3分钟", "station_no": "09", "country_code": "", "country_name": "", "isEnabled": false }, { "arrive_time": "13:04", "station_name": "洛阳龙门", "isChina": "1", "start_time": "13:06", "stopover_time": "2分钟", "station_no": "10", "country_code": "", "country_name": "", "isEnabled": false }, { "arrive_time": "13:44", "station_name": "郑州东", "isChina": "1", "start_time": "13:55", "stopover_time": "11分钟", "station_no": "11", "country_code": "", "country_name": "", "isEnabled": false }, { "arrive_time": "14:45", "station_name": "商丘", "isChina": "1", "start_time": "14:53", "stopover_time": "8分钟", "station_no": "12", "country_code": "", "country_name": "", "isEnabled": false }, { "arrive_time": "15:11", "station_name": "砀山南", "isChina": "1", "start_time": "15:13", "stopover_time": "2分钟", "station_no": "13", "country_code": "", "country_name": "", "isEnabled": false }, { "arrive_time": "15:31", "station_name": "萧县北", "isChina": "1", "start_time": "15:33", "stopover_time": "2分钟", "station_no": "14", "country_code": "", "country_name": "", "isEnabled": false }, { "arrive_time": "15:50", "station_name": "徐州东", "isChina": "1", "start_time": "15:53", "stopover_time": "3分钟", "station_no": "15", "country_code": "", "country_name": "", "isEnabled": false }, { "arrive_time": "16:26", "station_name": "宿迁", "isChina": "1", "start_time": "16:28", "stopover_time": "2分钟", "station_no": "16", "country_code": "", "country_name": "", "isEnabled": false }, { "arrive_time": "16:56", "station_name": "淮安东", "isChina": "1", "start_time": "16:58", "stopover_time": "2分钟", "station_no": "17", "country_code": "", "country_name": "", "isEnabled": false }, { "arrive_time": "17:19", "station_name": "建湖", "isChina": "1", "start_time": "17:21", "stopover_time": "2分钟", "station_no": "18", "country_code": "", "country_name": "", "isEnabled": false }, { "arrive_time": "17:36", "station_name": "盐城", "isChina": "1", "start_time": "17:38", "stopover_time": "2分钟", "station_no": "19", "country_code": "", "country_name": "", "isEnabled": false }, { "arrive_time": "18:04", "station_name": "海安", "isChina": "1", "start_time": "18:06", "stopover_time": "2分钟", "station_no": "20", "country_code": "", "country_name": "", "isEnabled": false }, { "arrive_time": "18:35", "station_name": "张家港", "isChina": "1", "start_time": "18:37", "stopover_time": "2分钟", "station_no": "21", "country_code": "", "country_name": "", "isEnabled": false }, { "arrive_time": "18:47", "station_name": "常熟", "isChina": "1", "start_time": "18:49", "stopover_time": "2分钟", "station_no": "22", "country_code": "", "country_name": "", "isEnabled": false }, { "arrive_time": "19:07", "station_name": "太仓", "isChina": "1", "start_time": "19:09", "stopover_time": "2分钟", "station_no": "23", "country_code": "", "country_name": "", "isEnabled": false }, { "arrive_time": "19:42", "station_name": "上海虹桥", "isChina": "1", "start_time": "19:42", "stopover_time": "----", "station_no": "24", "country_code": "", "country_name": "", "isEnabled": false }] } 参考资料(版权): https://www.apihz.cn/api/12306api3.html

  • 百家号文章内容提取免费API接口教程

    接口简介: 提取指定百家号文章网页的内容。本接口仅做内容提取,未经作者授权请勿转载。 请求地址: https://cn.apihz.cn/api/caiji/baijiahao.php 请求方式: POST或GET。 请求参数: 【名称】【参数】【必填】【说明】 【用户ID】【id】【是】【用户中心的数字ID,例:id=10000000】 【用户KEY】【key】【是】【用户中心通讯秘钥,例:key=15he5h15ty854j5sr152hs2】 【文章URL】【url】【是】【文章地址,例:url=https://baijiahao.baidu.com/s?id=1827926431094281488】 【Cookie】【ck】【否】【如果多次提取失败可能是ck失效,可以自定义ck,打开浏览器自行F12调试,随便打开一个百家号文章,然后复制整段ck,传参整段ck即可,例:ck=BIDUPSID=1B22D4B04730824541A9320CB76B31FA; PSTM=1726654096; MAWEBCUID=web_BXZFWmdxQFKSnJBnBOqgoUfwGijPLZLiHUsRxZjuexnDTNdvLQ; theme=bjh; MCITY=-%3A; __yjs_duid=1_d2dd0e39fa95bc7b4b2f2d500e64e9e21749820407277; devStoken=b0a85874482a6f09df425d800974700e57c81cfdc8be93af7948f2a866010f1e; bjhStoken=ed7fe7d5f6d92fb0877dbd32ff4a52df57c81cfdc8be93af7948f2a866010f1e; BAIDUID=CBE65C19C60978BE9E489FD644A38A4A:FG=1; H_WISE_SIDS=62325_63142_63327_63403_63568_63564_63583_63579_63591_63638_63643_63647_63657_63671_63724_63726; Hm_lvt_f7b8c775c6c8b6a716a75df506fb72df=1748262859,1749535068,1749802954,1750737343; H_PS_PSSID=62325_63142_63327_63403_63568_63564_63583_63579_63591_63638_63643_63647_63657_63671_63724_63726_63275; BDRCVFR[feWj1Vr5u3D]=I67x6TjHwwYf0; delPer=0; PSINO=2; BAIDUID_BFESS=CBE65C19C60978BE9E489FD644A38A4A:FG=1; BA_HECTOR=2l2g2ga1ak84ah0104a000848h8k0j1k5klua24; ZFY=1DKeqZ97a06AWs7iHIVY:A:A:BoufNLTM2AQ71xS45xk1o:C; BDRCVFR[S_ukKV6dOkf]=mk3SLVN4HKm; BDORZ=FFFB88E999055A3F8A630C64834BD6D0; MBDFEEDSG=b0e44eecff0ba7ccccbfabb0f469455f_1750751996; ab_sr=1.0.1_YmZmYzFhZDZlZTNhMzRhZTdjYzllZTNjZTQzMzNkZmY2NTRkZDdjNzczMjY2NmFlMjg2YzdiYWJlOGU1YTk0OGI2MDMyNDc2M2Q4MmU5ZDkxNGQyYzRjYjc3YWJiY2Y2ZGEyZTQyZWI3NjQ2YmRhNjdiN2Q5NzY3ZDQ3ZTg4ZDlhYTczODdhNzIxODkyOWJlOGJiZGQzNTEzZjYzNGE0NQ==】 返回参数: 【名称】【参数】【说明】 【状态码】【code】【200成功,400错误】 【信息提示】【msg】【信息提示。】 【作者昵称】【name】【作者昵称。】 【作者头像】【head】【作者头像。】 【认证标签】【authorTag】【认证标签。】 【作者链接】【author_link】【作者链接。】 【作者签名】【sign】【作者签名。】 【作者总赞数】【zzzanNum】【作者总赞数。】 【作者粉丝数】【zzfansNum】【作者粉丝数。】 【作者IP数据集】【iptopoi】【作者IP数据集。】 【文章收藏数】【is_favourite】【文章收藏数。】 【文章点赞数】【zan】【文章点赞数。】 【文章评论数】【commentNum】【文章评论数。】 【文章标题】【title】【文章标题。】 【发布时间】【time】【文章发布时间。】 【AI导读】【ai】【AI导读。】 【文章内容】【content】【文章内容。】 【图片集】【imageList】【文章图片集。】 GET请求示例: https://cn.apihz.cn/api/caiji/baijiahao.php?id=88888888&key=88888888&url=https://baijiahao.baidu.com/s?id=1827926431094281488&ck= 注意:示例里的ID与KEY为公共ID与KEY,共享每分钟调用频次限制,接口本身免费,请使用自己的ID与KEY,独享每分钟调用频次。每日调用无上限。 POST请求示例: 请根据开发语言自行POST。 返回数据示例: 示例:{"code":400,"msg":"通讯秘钥错误。"} 示例: { "code": 200, "name": "绵阳耳关明皿网络科技有限公司", "head": "https://avatar.bdstatic.com/it/u=3707973977,2514119119&fm=3012&app=3012&autime=1750385583&size=b200,200", "authorTag": "绵阳耳关明皿网络科技官方账号", "author_link": "https://author.baidu.com/home?from=bjh_article&app_id=1775903700973612", "sign": "免费API接口大全教程。", "zzzanNum": "85", "zzfansNum": "187", "iptopoi": { "City": "绵阳", "CountryName": "中国", "County": "江油", "Province": "四川" }, "is_favourite": "0", "zan": "0", "commentNum": "0", "title": "2025年免费API接口稳定平台收集整理「白嫖干货」附PHP-POST教程", "time": "2025-03-29 19:08:09", "ai": "无论你需要什么内容,都能找到对应的API接口!覆盖天气预报、自然灾害、地图服务的免费平台推荐,OpenWeather薅羊毛攻略、接口盒子全自营集群化部署、天地图官方地理编码服务,搭配PHP-POST请求代码模板,任何开发环境都能轻松调用稳定资源。", "content": "API接口一般是指通过GET或POST的请求方式获取对应的信息,兼容各种开发语言,可以说任何开发环境都能使用,只要你懂得GET或POST。比如你要获取天气预报,那么找到对应的接口地址,提交对应的请求参数就能获得天气信息。无论你需要什么内容,基本都能找到对应的接口,这就是网络API的魅力。下面是最新收集整理的免费API接口平台:1:open weather官网:https://openweathermap.org/说明:openweather是美国一个提供全球免费天气预报的平台,同时还提供其他内容如自然灾害,地理位置查询等,免费对外提供API,每个用户可免费享调用1000次/天。但我们可以通过注册多个账号来薅。2:美国地质调查局官网:https://www.usgs.gov/说明:美国地质调查局是美国政府官方机构,提供包括地震等自然灾害信息,同时免费对外提供API调用。3:天地图官网:http://lbs.tianditu.gov.cn/home.html说明:天地图是我国官方机构推出的地图服务,提供包含地图API,WEB端API,可查询地理编码,行政区划,地图,路线规划等。任何个人和企业均可注册成为开发者免费使用,比商业地图公司良心多了。https://pics2.baidu.com/feed/0d338744ebf81a4c8b2cffec7867fd56252da652.jpeg@f_auto?token=1f6e592d29facf17e165f2af80ff48634:接口盒子-五星推荐官网:https://www.apihz.cn/说明:接口盒子是由企业运营的免费API接口平台,提供包括天气预报,数据存储,图像壁纸,网络验证,语言翻译,二维码,人脸,地理查询等数百种免费API接口。特色:全自营接口,拥有集群化部署的服务器和网络节点,在免费API接口领域里是一个不可多得的稳定平台。https://pics0.baidu.com/feed/b21c8701a18b87d69b4a93b3a845b5371e30fdeb.jpeg@f_auto?token=1c6e10622477a3c2b8c18a1766c137d35:夏柔API官网:https://api.aa1.cn/说明:一个比较老的免费接口平台,除自身推出的免费API接口外,还提供API开发者入住,搜集了各种各式各样的接口。https://pics6.baidu.com/feed/09fa513d269759ee83587dcd02b6de196d22df0d.jpeg@f_auto?token=e88a654a7ea7605e44fbc56857b3fe006:FREE API官网:https://www.free-api.com/说明:也是一个比较老牌的免费API接口搜集平台,自身不直接提供接口,专门搜集网上各种免费的接口。https://pics3.baidu.com/feed/2fdda3cc7cd98d1016632e938e7225017aec90bd.jpeg@f_auto?token=b98389e5f8511168405c8901ee5b4f06附:PHP-POST教程", "imageList": [ "https://pics2.baidu.com/feed/0d338744ebf81a4c8b2cffec7867fd56252da652.jpeg@f_auto?token=1f6e592d29facf17e165f2af80ff4863", "https://pics0.baidu.com/feed/b21c8701a18b87d69b4a93b3a845b5371e30fdeb.jpeg@f_auto?token=1c6e10622477a3c2b8c18a1766c137d3", "https://pics6.baidu.com/feed/09fa513d269759ee83587dcd02b6de196d22df0d.jpeg@f_auto?token=e88a654a7ea7605e44fbc56857b3fe00", "https://pics3.baidu.com/feed/2fdda3cc7cd98d1016632e938e7225017aec90bd.jpeg@f_auto?token=b98389e5f8511168405c8901ee5b4f06"] } 参考资料(版权): https://www.apihz.cn/api/caijibaijiahao.html

  • 短网址生成-随机后缀免费API接口教程

    接口简介: 将网页地址生成短链接,永久有效。生成后的短网址支持访问统计,可通过【短网址生成-查询信息】接口查询。注意,短网址每次跳转占用开发者接口调用频次。禁止利用本接口生成的短网址跳转违法违规网页。 请求地址: https://cn.apihz.cn/api/wangzhan/dwz1.php 请求方式: POST或GET。 请求参数: 【名称】【参数】【必填】【说明】 【用户ID】【id】【是】【用户中心的数字ID,例:id=10000000】 【用户KEY】【key】【是】【用户中心通讯秘钥,例:key=15he5h15ty854j5sr152hs2】 【跳转链接】【url】【是】【要跳转的网页地址,如果地址中带&符号,请将&替换为,链接长度最大1000。例:url=https://www.apihz.cn/article/84ad4a99d7d78203be42abf0e189e37d.html?a=1b=2】 【主域类型】【type】【否】【1=00l.xyz,2=l00.xyz,默认随机。例:type=1】 返回参数: 【名称】【参数】【说明】 【状态码】【code】【200成功,400错误】 【信息提示】【msg】【如果状态码返回400,则msg返回错误提示。】 【后缀码】【ucode】【短网址后缀,默认5-7位后缀,优先生成短位】 【域名】【domain】【短网址主域】 【短网址】【dwz】【生成后的短网址】 GET请求示例: https://cn.apihz.cn/api/wangzhan/dwz1.php?id=88888888&key=88888888&type=1&url=https://www.apihz.cn/article/84ad4a99d7d78203be42abf0e189e37d.html 注意:示例里的ID与KEY为公共ID与KEY,共享每分钟调用频次限制,接口本身免费,请使用自己的ID与KEY,独享每分钟调用频次。每日调用无上限。 POST请求示例: 请根据开发语言自行POST。 返回数据示例: 示例:{"code":400,"msg":"通讯秘钥错误。"} 示例: { "code": 200, "ucode": "aDRoh", "domain": "oo1.xyz", "dwz": "https://oo1.xyz/aDRoh" } 参考资料(版权): https://www.apihz.cn/api/wangzhandwz1.html

  • 短网址生成-指定后缀免费API接口教程

    接口简介: 将网页地址生成短链接,永久有效。可自定义生成后缀。生成后的短网址支持访问统计,可通过【短网址生成-查询信息】接口查询。注意,短网址每次跳转占用开发者接口调用频次。禁止利用本接口生成的短网址跳转违法违规网页。 请求地址: https://cn.apihz.cn/api/wangzhan/dwz2.php 请求方式: POST或GET。 请求参数: 【名称】【参数】【必填】【说明】 【用户ID】【id】【是】【用户中心的数字ID,例:id=10000000】 【用户KEY】【key】【是】【用户中心通讯秘钥,例:key=15he5h15ty854j5sr152hs2】 【后缀】【code】【是】【短网址自定义后缀,长度1-10,支持字母与数字。例:code=abc】 【跳转链接】【url】【是】【要跳转的网页地址,如果地址中带&符号,请将&替换为,链接长度最大1000。例:url=https://www.apihz.cn/article/84ad4a99d7d78203be42abf0e189e37d.html?a=1b=2】 【主域类型】【type】【否】【1=00l.xyz,2=l00.xyz,默认随机。例:type=1】 返回参数: 【名称】【参数】【说明】 【状态码】【code】【200成功,400错误,生成失败不扣费】 【信息提示】【msg】【如果状态码返回400,则msg返回错误提示。】 【后缀码】【ucode】【短网址后缀。】 【域名】【domain】【短网址主域】 【短网址】【dwz】【生成后的短网址】 GET请求示例: https://cn.apihz.cn/api/wangzhan/dwz2.php?id=88888888&key=88888888&type=1&code=abc&url=https://www.apihz.cn/article/84ad4a99d7d78203be42abf0e189e37d.html 注意:示例里的ID与KEY为公共ID与KEY,共享每分钟调用频次限制,接口本身免费,请使用自己的ID与KEY,独享每分钟调用频次。每日调用无上限。 POST请求示例: 请根据开发语言自行POST。 返回数据示例: 示例:{"code":400,"msg":"通讯秘钥错误。"} 示例: { "code": 200, "ucode": "abc", "domain": "oo1.xyz", "dwz": "https://oo1.xyz/abc" } 参考资料(版权): https://www.apihz.cn/api/wangzhandwz2.html

  • 短网址生成-查询信息免费API接口教程

    接口简介: 查询短网址生成接口生成的短网址相关信息。 请求地址: https://cn.apihz.cn/api/wangzhan/dwz3.php 请求方式: POST或GET。 请求参数: 【名称】【参数】【必填】【说明】 【用户ID】【id】【是】【用户中心的数字ID,例:id=10000000】 【用户KEY】【key】【是】【用户中心通讯秘钥,例:key=15he5h15ty854j5sr152hs2】 【后缀】【code】【是】【短网址的后缀。例:code=abc】 【域名】【domain】【是】【短网址的主域。例:domain=l00.xyz】 返回参数: 【名称】【参数】【说明】 【状态码】【code】【200成功,400错误】 【信息提示】【msg】【如果状态码返回400,则msg返回错误提示。】 【后缀码】【ucode】【短网址后缀。】 【域名】【domain】【短网址主域】 【短网址】【dwz】【短网址】 【跳转地址】【url】【跳转地址】 【今日跳转量】【daynum】【今日跳转量】 【昨日跳转量】【ydaynum】【昨日跳转量】 【总计跳转量】【numall】【总计跳转量】 【生成时间戳】【addtime】【生成时间戳】 【最后跳转时间戳】【endtime】【最后跳转时间戳】 【生成时间】【addtime2】【生成时间】 【最后跳转时间】【endtime2】【最后跳转时间】 【状态】【on】【0=正常,1=封禁】 GET请求示例: https://cn.apihz.cn/api/wangzhan/dwz3.php?id=88888888&key=88888888&code=abc&domain=00l.xyz 注意:示例里的ID与KEY为公共ID与KEY,共享每分钟调用频次限制,接口本身免费,请使用自己的ID与KEY,独享每分钟调用频次。每日调用无上限。 POST请求示例: 请根据开发语言自行POST。 返回数据示例: 示例:{"code":400,"msg":"通讯秘钥错误。"} 示例: { "code": 200, "ucode": "abc", "domain": "00l.xyz", "dwz": "https://00l.xyz/abc", "url": "https://www.apihz.cn/article/84ad4a99d7d78203be42abf0e189e37d.html", "daynum": "4", "ydaynum": "43", "numall": "47", "addtime": "1751034494", "endtime": "1751040711", "addtime2": "2025-06-27 22:28:14", "endtime2": "2025-06-28 00:11:51", "on": "0" } 参考资料(版权): https://www.apihz.cn/api/wangzhandwz3.html

  • «上一页
  • 下一页 »