HTTP协议、Wireshark抓包工具、json解析、天气爬虫
HTTP超文本传输协议
-
HTTP(Hyper Text Transfer Protocol): 全称超文本传输协议,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
-
HTTP 协议的重要特点: 一发一收,一问一答
-
明文传输 ,https密文 (加密了的)
现在的主流网站都是https
网址:URL 统一资源定位符
URL
互联网上每个文件都有一个唯一的 URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
<协议>://<主机>:<端口>/<路径>
协议:HTTP 80 TCP
HTTPS 443 TCP
主机: 域名 -> 域名解析服务器 -> IP地址
端口: 可以省略, HTTP 80
HTTPS 443
路径: 想要获得对应的资源
https://www.example.com/path/to/resource?query=parameter#fragment
•https 是协议,
•www.example.com 是主机名,域名
•/path/to/resource 是路径,
•query=parameter 是查询参数,
•#fragment 是片段标识符。
HTTP交互过程:
1.建立TCP连接
2.发送HTTP请求报文
3.回复HTTP相应报文
4.关闭TCP连接
要一次建立一次tcp连接,关闭一次连接
HTTP请求报文的格式:
HTTP响应报文格式:
GET 方法
基本介绍:
以下几种方式都会触发 GET 方法的请求
Wireshark 抓包工具
sudo apt-get install wireshark
为什么很多软件都可以用apt-get install安装?
apt-get 是 Debian 及其衍生系统(如 Ubuntu、Linux Mint 等)中的高级包工具(Advanced Package Tool)的命令行接口。
1.集中化的软件仓库: Debian 和其衍生系统维护着庞大的软件仓库,这些仓库包含了成千上万个预编译的软件包。当软件开发者将他们的软件贡献给这些仓库时,软件就变得可供所有使用相同系统的用户通过 apt-get 安装。
2. 依赖关系管理: apt-get 能够解析和处理软件包之间的依赖关系。这意味着当你安装一个软件包时,apt-get 会自动安装所有必要的依赖包,确保软件能够正常运行。这种依赖关系管理大大简化了安装过程。
3.社区贡献和维护: 一个活跃的社区持续为 Debian 和其衍生系统贡献软件包。这些贡献者不仅提供新的软件包,还负责保持现有软件包的更新和维护,确保它们与最新系统兼容。
一般过滤条件先选择协议名 然后用端口过滤。
先运行网站如何抓取http格式的数据
Nowapi的ip地址和端口号 为 103.205.5.228:80
GET /?app=weather.today&weaid=%E8%A5%BF%E5%AE%89&appkey=72317&sign=be43b728a4f27463d34f4fcbfea69134&format=json HTTP/1.1
Host: api.k780.com
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/113.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1
HTTP/1.1 200 OK
Server: nginx
Date: Thu, 18 Jul 2024 08:23:48 GMT
Content-Type: application/json; charset=utf-8;
Transfer-Encoding: chunked
Connection: keep-alive
Access-Control-Allow-Origin: *
{"success":"1","result":{"weaid":"316","days":"2024-07-18","week":".........","cityno":"xian","citynm":"......","cityid":"101110101","temperature":"33.../24...","temperature_curr":"33...","humidity":"75%","aqi":"40","weather":"......","weather_curr":"...","weather_icon":"http://api.k780.com/upload/weather/d/2.gif","weather_icon1":"","wind":"......","winp":"2...","temp_high":"33","temp_low":"24","temp_curr":"33","humi_high":"0","humi_low":"0","weatid":"3","weatid1":"","windid":"8","winpid":"2","weather_iconid":"2"}}
用httl协议获取今日天气的信息(json格式)
#include"head.h"int CreatTcpClient(char *pip,int port)
{int ret = 0;int sockfd = 0;struct sockaddr_in seraddr;sockfd = socket(AF_INET,SOCK_STREAM,0);if(-1 == sockfd){perror("fail to socket");return -1;}seraddr.sin_family = AF_INET;seraddr.sin_port = htons(port);seraddr.sin_addr.s_addr = inet_addr(pip);ret = connect(sockfd,(struct sockaddr *)&seraddr,sizeof(seraddr));if(-1 == ret){perror("fail to connect ");return -1;}return sockfd;}int SendHttpRequest(int sockfd,char *purl)
{char tmpbuff[4096] = {0};ssize_t nsize = 0;sprintf(tmpbuff,"GET %s HTTP/1.1\r\n",purl); //%s 用于将 purl里存放的内容拼接到 tmpbuffsprintf(tmpbuff,"%sHost: api.k780.com\r\n",tmpbuff);sprintf(tmpbuff,"%sUser-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/113.0\r\n",tmpbuff);sprintf(tmpbuff,"%sAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8\r\n",tmpbuff);sprintf(tmpbuff,"%sAccept-Language: en-US,en;q=0.5\r\n",tmpbuff);sprintf(tmpbuff,"%sConnection: keep-alive\r\n\r\n",tmpbuff);nsize = send(sockfd,tmpbuff,strlen(tmpbuff),0);if(-1 == nsize){perror("fail to send");return -1;}return 0;}int main(int argc, const char *argv[])
{int sockfd = 0;ssize_t nsize = 0;char tmpbuff[4096] = {0};sockfd = CreatTcpClient("103.205.5.228",80);SendHttpRequest(sockfd,"/?app=weather.today&weaid=%E8%A5%BF%E5%AE%89&appkey=72317&sign=be43b728a4f27463d34f4fcbfea69134&format=json");nsize = recv(sockfd,tmpbuff,sizeof(tmpbuff),0);if(-1 == nsize){perror("fial to recv");return -1;}printf("*********RECV***********\n");printf("%s\n",tmpbuff);printf("************************\n");close(sockfd);return 0;
}
json数据解析
{"success":"1","result":{"weaid":"316","days":"2024-07-18","week":"星期四","cityno":"xian","citynm":"西安","cityid":"101110101","temperature":"33℃/24℃","temperature_curr":"32℃","humidity":"82%","aqi":"41","weather":"多云","weather_curr":"多云","weather_icon":"http://api.k780.com/upload/weather/d/1.gif","weather_icon1":"","wind":"西南风","winp":"1级","temp_high":"33","temp_low":"24","temp_curr":"32","humi_high":"0","humi_low":"0","weatid":"2","weatid1":"","windid":"5","winpid":"1","weather_iconid":"1"} }
这是一个两层的
JSON格式
一种数据格式
JSON(JavaScript Object Notation)通常用于Web应用程序之间以及客户端与服务器之间的数据交换。
JSON的基本结构包括对象和数组:‘
•对象是一系列无序的键值对。对象以 { 开始 ,以 } 结束。每个键后面跟一个冒号 : 每个键值对之间用逗号 , 分隔。
•数组是值的有序集合。数组以 [ 开始,以 ] 结束。值之间使用逗号 , 分隔。
字符串:
{"name":"code","gender":"male"
}
数字:
{"key1":10,"key2":20.0
}
数组:
{"key1" : [0, 1],"key2" : [2, 3]}
允许嵌套
{"name": "John Doe","age": 30,"isEmployed": true,"address": {"street": "123 Main St","city": "Anytown"},"phoneNumbers": [{"type": "home","number": "555-1234"},{"type": "mobile","number": "555-5678"}]
}
name、age 和 isEmployed 是简单的键值对。address 是一个嵌套的对象,phoneNumbers 是一个包含对象的数组。
利用cJOSN解析json格式:
http://t.csdnimg.cn/KbuRZ
NowAPI天气爬虫
json请求
URL: http://api.k780.com/?app=weather.today&weaId=1&appkey=APPKEY&sign=SIGN&format=json
注意:
appkey:换成自己的APPKey
sign:换成自己的sign标识
1.正常返回 {"success": "1","result": {"weaid": "1","days": "2014-07-30","week": "星期三","cityno": "beijing","citynm": "北京","cityid": "101010100","temperature": "31℃/24℃", /*白天 夜间温度 (注: 夜间只有一个温度如24℃/24℃)*/"temperature_curr": "25℃", /*当前温度*/"humidity": "50%",/*湿度*/"aqi": "100",/*pm2.5 说明详见weather.pm25*/"weather": "多云转晴", /*天气*/"weather_icon": "http://api.k780.com/upload/weather/d/1.gif", /*气象图标 全部气象图标下载*/"weather_icon1": "", /*无意义不必理会*/"wind": "微风",/*风向*/"winp": "小于3级", /*风力*/"temp_high": "31", /*最高温度*/"temp_low": "24", /*最低温度*/"humi_high": "87.8", /*最大湿度 [历史遗留栏位不再更新]*/"humi_low": "75.2", /*最小湿度 [历史遗留栏位不再更新]*/"weatid": "2", /*天气ID,可对照weather.wtype接口中weaid*/"weatid1": "", /*无意义不必理会*/"windid": "1", /*风向ID(暂无对照表)*/"winpid": "2" /*风力ID(暂无对照表)*/"weather_iconid": "1" /*气象图标编号,对应weather_icon 1.gif*/} }
请求报文格式:
GET 是最常用的 HTTP 方法,常用于获取服务器上的某个资源。
在浏览器中直接输入 URL 回车或点击浏览器收藏夹中的链接,此时浏览器就会发送出一个 GET 请求。
响应报文格式:
HTTP/1.1 200 OK\r\n
Server: nginx\r\n
Date: Fri, 08 Mar 2024 06:33:44 GMT\r\n
Content-Type: application/json; charset=utf-8;\r\n
Transfer-Encoding: chunked\r\n
Connection: keep-alive\r\n
Access-Control-Allow-Origin: *\r\n
\r\n
{"success":"1","result":{"weaid":"316","days":"2024-03-08","week":".........","cityno":"xian","citynm":"......","cityid":"101110101","temperature":"13.../0...","temperature_curr":"12...","humidity":"29%","aqi":"65","weather":"............","weather_curr":"...","weather_icon":"http://api.k780.com/upload/weather/d/0.gif","weather_icon1":"","wind":"......","winp":"2...","temp_high":"13","temp_low":"0","temp_curr":"12","humi_high":"0","humi_low":"0","weatid":"1","weatid1":"","windid":"4","winpid":"2","weather_iconid":"0"}}\r\n
- HTTP 在传输层依赖 TCP 协议,TCP 是面向字节流的。如果没有这个空行,就会出现”粘包问题“所以报文中会有很多 \r\n
- 因为 HTTP 协议并没有规定报头部分的键值对有多少个,使用空行就相当于是报文的结束标记或报文和正文之间的分隔符
#include"head.h"
#include "cJSON.h"
int CreatTcpClient(char *pip,int port)
{int ret = 0;int sockfd = 0;struct sockaddr_in seraddr;sockfd = socket(AF_INET,SOCK_STREAM,0);if(-1 == sockfd){perror("fail to socket");return -1;}seraddr.sin_family = AF_INET;seraddr.sin_port = htons(port);seraddr.sin_addr.s_addr = inet_addr(pip);ret = connect(sockfd,(struct sockaddr *)&seraddr,sizeof(seraddr));if(-1 == ret){perror("fail to connect ");return -1;}return sockfd;}int SendHttpRequest(int sockfd,char *purl)
{char tmpbuff[4096] = {0};ssize_t nsize = 0;sprintf(tmpbuff,"GET %s HTTP/1.1\r\n",purl); //%s 用于将 purl里存放的内容拼接到 tmpbuffsprintf(tmpbuff,"%sHost: api.k780.com\r\n",tmpbuff);sprintf(tmpbuff,"%sUser-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/113.0\r\n",tmpbuff);sprintf(tmpbuff,"%sAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8\r\n",tmpbuff);sprintf(tmpbuff,"%sAccept-Language: en-US,en;q=0.5\r\n",tmpbuff);sprintf(tmpbuff,"%sConnection: keep-alive\r\n\r\n",tmpbuff);nsize = send(sockfd,tmpbuff,strlen(tmpbuff),0);if(-1 == nsize){perror("fail to send");return -1;}return 0;}int get_json(char *all_tmpbuff)
{char *start, *end;size_t json_length;cJSON *json = NULL;cJSON *json_result = NULL;cJSON *json_days = NULL;cJSON *json_cityno = NULL;cJSON *json_weather = NULL;// 直接使用 all_tmpbuff,避免不必要的字符串复制start = strchr(all_tmpbuff, '{');if (start == NULL){printf("json data not find\n");return -1;}end = strrchr(all_tmpbuff, '}');if (end == NULL){printf("closing brace not find\n");return -1;}json_length = end - start + 1;// 使用 all_tmpbuff[start, end] 进行解析,无需复制// 解析 JSONjson = cJSON_Parse(start);if (!json){printf("cJSON_Parse error: %s\n", cJSON_GetErrorPtr());return -1;}// 获取 "result" 对象json_result = cJSON_GetObjectItem(json, "result");if (!json_result){printf("Failed to find 'result' object\n");cJSON_Delete(json);return -1;}// 从 "result" 中获取 "days"json_days = cJSON_GetObjectItem(json_result, "days");json_cityno = cJSON_GetObjectItem(json_result, "cityno");json_weather = cJSON_GetObjectItem(json_result, "weather");/*if (!json_days || !cJSON_IsString(json_days)){printf("Failed to find 'days' string\n");cJSON_Delete(json);return -1;}*/printf("days: %s\tcity: %s\tweather %s\n", json_days->valuestring,json_cityno->valuestring,json_weather->valuestring);cJSON_Delete(json);return 0;
}int main(int argc, const char *argv[])
{int sockfd = 0;ssize_t nsize = 0;char tmpbuff[4096] = {0};sockfd = CreatTcpClient("103.205.5.228",80);SendHttpRequest(sockfd,"/?app=weather.today&weaid=%E8%A5%BF%E5%AE%89&appkey=72317&sign=be43b728a4f27463d34f4fcbfea69134&format=json");nsize = recv(sockfd,tmpbuff,sizeof(tmpbuff),0);if(-1 == nsize){perror("fial to recv");return -1;}printf("*********RECV***********\n");printf("%s\n",tmpbuff);printf("************************\n");get_json(tmpbuff);close(sockfd);return 0;
}
运行结果:
相关文章:
![](https://i-blog.csdnimg.cn/direct/36567c4a89154d55990ad2c0ec392bb8.png)
HTTP协议、Wireshark抓包工具、json解析、天气爬虫
HTTP超文本传输协议 HTTP(Hyper Text Transfer Protocol): 全称超文本传输协议,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。 HTTP 协议的重要特点: 一发一收…...
![](https://i-blog.csdnimg.cn/direct/8fe95432eef04591b6471d98f967863f.png#pic_center)
electron项目中实现视频下载保存到本地
第一种方式:用户自定义选择下载地址位置 渲染进程 // 渲染进程// 引入 import { ipcRenderer } from "electron";// 列表行数据下载视频操作,diffVideoUrl 是视频请求地址 handleDownloadClick(row) {if (!row.diffVideoUrl) {this.$message…...
![](https://i-blog.csdnimg.cn/direct/7d5890439ef44db199bbde18fac9100c.png)
基于chrome插件的企业应用
一、chrome插件技术介绍 1、chrome插件组件介绍 名称 职责 访问权限 DOM访问情况 popup 弹窗页面。即打开形式是通过点击在浏览器右上方的icon,一个弹窗的形式。 注: 展示维度 browser_action:所有页面 page_action:指定页面 可访问绝大部分api 不可以 bac…...
![](https://i-blog.csdnimg.cn/direct/ae8b0fcd512b4865bea93188194c05c5.png#pic_center)
unittest框架和pytest框架区别及示例
unittest框架和pytest框架区别及示例 类型unittest框架pytest框架unittest框架示例pytest框架示例安装python内置的一个单元测试框架,标准库,不需要安装第三方单元测试库,需要安装使用时直接引用 import unittest安装命令:pip3 install pyte…...
![](https://www.ngui.cc/images/no-images.jpg)
IDEA性能优化方法解决卡顿
文章目录 前言一、可以采取以下措施:二、VM Options的参数解释1. 内存设置2. 性能调优3. GC(垃圾回收)调优4. 调试和诊断5. 其它设置6.设置 VM Options 的步骤: 总结 前言 我们在使用 IntelliJ IDEA的时候有时候会觉得卡顿&#x…...
![](https://www.ngui.cc/images/no-images.jpg)
Mysql集合转多行
mysql 集合转多行 SELECT substring_index(substring_index(t1.group_ids, ,, n), ,, -1) AS group_id FROM (select 908,909 as group_ids ) t1, (SELECT rownum : rownum 1 AS n FROM ( SELECT rownum : 0 ) r, orders ) t2 WHERE n < ( LENGTH( t1.group_ids ) - LENGT…...
![](https://www.ngui.cc/images/no-images.jpg)
MFC:只允许产生一个应用程序实例的具体实现
在MFC(Microsoft Foundation Class)应用程序中,如果你想限制只允许产生一个应用程序实例,通常会使用互斥体(Mutex)来实现。这可以确保如果用户尝试启动第二个实例时,它会被阻止或将焦点返回到已…...
![](https://www.ngui.cc/images/no-images.jpg)
深入理解TCP/IP协议中的三次握手
👍 个人网站:【洛秋资源小站】 深入理解TCP/IP协议中的三次握手 在计算机网络中,TCP/IP协议是通信的基石。理解TCP/IP协议中的三次握手是掌握网络通信的关键步骤之一。本文将详细解释TCP/IP协议中的三次握手过程,探讨其工作原理&…...
![](https://www.ngui.cc/images/no-images.jpg)
【React】事件绑定、React组件、useState、基础样式
React 教程 目录 事件绑定 1.1. 基础实现 1.2. 使用事件参数 1.3. 传递自定义参数 1.4. 同时传递事件对象和自定义参数 React 组件 2.1. 组件是什么 2.2. 组件基础使用 useState:状态管理 3.1. 基础使用 3.2. 状态的修改规则 3.3. 修改对象状态 基础样式 4.1. 行…...
![](https://www.ngui.cc/images/no-images.jpg)
x264、x265、libaom 编码对比实验
介绍 x264 是一个开源的高性能 H.264/MPEG-4 AVC 编码器,它以其优秀的压缩比和广泛的适用性而闻名。x265 是一种用于将视频流编码成 H.265/MPEG-H HEVC 压缩格式的免费软件库和应用程序,以其下一代压缩能力和卓越的质量而闻名 。作为 x264 的继任者,x265 支持 HEVC 的 Main、…...
![](https://i-blog.csdnimg.cn/direct/78f22f9ff0a649e798886f4abc130301.png)
c++网络编程实战——开发基于ftp协议的文件传输模块(二) 配置ftp服务与手动执行ftp命令
配置FTP服务 一.前言 博主的环境是阿里云服务器,操作系统版本为 ubuntu20.04,一下所有操作都基于以上环境下进行的操作,同时为了简化操作我将开放同一个云服务器的不同端口,让它同时充当服务端和客户端,大家如果想测试效果更好且…...
![](https://www.ngui.cc/images/no-images.jpg)
Sphinx 安装相关指令解释
安装指令 pip3 install sphinx-autobuildpip3 install sphinx_rtd_themepip3 install sphinx_markdown_tablepip3 install sphinx_markdown_tables pip3 install sphinx-autobuild 功能:安装 sphinx-autobuild 包。作用:sphinx-autobuild 是一个工具&am…...
![](https://www.ngui.cc/images/no-images.jpg)
npm下载包-更改默认缓存目录
npm(Node Package Manager)的缓存目录是npm用于存储已下载包的本地位置,以便在后续安装相同包时能够快速复用,从而节省时间和带宽。npm缓存目录的具体位置会根据操作系统的不同而有所差异。 Windows系统 在Windows系统中&#x…...
![](https://i-blog.csdnimg.cn/direct/46d736fbe5274c33aaaf8d00b083a3e7.png)
PWM再理解(1)
前言 昨天过于劳累,十点睡觉,本来想梳理一下PWM,今天补上。 PWM内涵 PWM全称:Pulse Width Modulation,也就是脉宽调制的意思,字面意思理解就是对脉冲的宽度进行改变。准确就是通过数字输出对模拟电路进行…...
![](https://img-blog.csdnimg.cn/img_convert/1ac60372da3f28d717a002e9e3ea0f6c.png)
CSPVD 智慧工地安全帽安全背心检测开发包
CSPVD SDK适用于为各种智慧工地应用增加安全防护穿戴合规的检测能力,能够有效检测未戴安全帽和未穿 安全背心的人员,提供Web API和原生API。官方下载:CSPVD工地安全防护检测 1、目录组织 CSPVD开发包的目录组织说明如下: xlpr_…...
![](https://www.ngui.cc/images/no-images.jpg)
给常用Docker命令起别名,提高效率
在日常的开发和运维工作中,Docker是一款非常常用的工具。为了提高工作效率,我们可以为一些常用的Docker命令设置别名,这样可以更快速地执行这些命令。以下是如何给常用Docker命令起别名的详细步骤。 修改/root/.bashrc文件 首先,…...
![](https://www.ngui.cc/images/no-images.jpg)
基于深度学习的草莓成熟度实时检测系统(UI界面+YOLOv8/v7/v6/v5模型+完整代码与数据集)
1. 引言 在农业领域,草莓的成熟度检测是保证果实品质的重要环节。传统的方法依赖于人工经验,不仅耗时费力,还容易出错。本文介绍如何使用YOLO(You Only Look Once)系列模型(YOLOv8/v7/v6/v5)构…...
![](https://i-blog.csdnimg.cn/direct/38d4c2f8117c48f1a99c4885e6cd40d2.png)
【devops】ttyd 一个web版本的shell工具 | web版本shell工具 | web shell
一、什么是 TTYD ttyd是在web端一个简单的服务器命令行工具 类似我们在云厂商上直接ssh链接我们的服务器输入指令一样 二、安装ttyd 1、macOS Install with Homebrew: brew install ttydInstall with MacPorts: sudo port install ttyd 2、linux Binary version (recommend…...
![](https://www.ngui.cc/images/no-images.jpg)
Windows环境Apache配置解析PHP,以及配置虚拟主机详解
1. 安装 Apache 和 PHP 确保你已经安装了 Apache Web 服务器和 PHP。你可以从官方网站下载它们的 Windows 版本: Apache HTTP ServerPHP 2. 配置 Apache 配置 httpd.conf 文件 找到你的 Apache 安装目录下的 conf 文件夹中的 httpd.conf 文件,使用文…...
![](https://i-blog.csdnimg.cn/direct/3a3db81960424c56b0b209d07e9d3c80.png)
Redis高级篇—分布式缓存
目录 Redis持久化 RDB持久化 AOF持久化 RDB与AOF对比 Redis主从 全量同步 增量同步 Redis哨兵 RedisTemplate集成哨兵实现 Redis分片集群 散列插槽 集群伸缩 故障转移 自动故障转移 手动故障转移 RedisTemplate访问分片集群 Redis持久化 RDB持久化 RDB全称Re…...
![](https://www.ngui.cc/images/no-images.jpg)
c++端的类,作为组件在qml端使用
qml使用c端的类,作为组件在qml端使用 这个类必须继承QObject 这个类必须继承QObject #ifndef COLLISIONALARM_H #define COLLISIONALARM_H#include <QObject>class CollisionAlarm : public QObject {Q_OBJECT//这个宏就叫做反射机制,让qml端直接…...
![](https://www.ngui.cc/images/no-images.jpg)
Android 14 适配之 - 全屏 intent 通知
全屏 intent 通知 在 Android 11(API 级别 30)中,任何应用都可以在手机处于锁定状态时使用 Notification.Builder.setFullScreenIntent 发送全屏 intent。在 AndroidManifest 中声明 USE_FULL_SCREEN_INTENT 权限即可; 全屏 int…...
![](https://www.ngui.cc/images/no-images.jpg)
如何在 Vue 和 JavaScript 中截取视频任意帧图片
大家好!今天我们来聊聊如何在 Vue 和 JavaScript 中截取视频的任意一帧图片。这个功能在很多场景下都非常有用,比如视频编辑、视频预览等。本文将带你一步步实现这个功能,并且会提供详细的代码示例。 准备工作 首先,我们需要一个…...
![](https://www.ngui.cc/images/no-images.jpg)
代码随想录学习 day54 图论 Bellman_ford 队列优化算法(又名SPFA) 学习
Bellman_ford 队列优化算法(又名SPFA) 卡码网:94. 城市间货物运输 I 题目描述 某国为促进城市间经济交流,决定对货物运输提供补贴。共有 n 个编号为 1 到 n 的城市,通过道路网络连接,网络中的道路仅允许从…...
![](https://www.ngui.cc/images/no-images.jpg)
递归遍历树结构,前端传入一整颗树,后端处理这个树,包括生成树的id和pid等信息,
递归逻辑 递归遍历树结构,将树结构转换list集合 并添加到 flowStepTree 集合 // 递归遍历树结构,将树结构转换list集合 并添加到 flowStepTree 集合private static void settingTree(ProductFlowStepVO node, Long parentId, String ancestors, List<…...
![](https://i-blog.csdnimg.cn/direct/93115fbc406742ccb76ac3206e9f050d.png)
Nginx详解(超级详细)
目录 Nginx简介 1. 为什么使用Nginx 2. 安装Nginx Nginx的核心功能 1. Nginx反向代理功能 2. Nginx的负载均衡 3 Nginx动静分离 Nginx简介 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协…...
![](https://www.ngui.cc/images/no-images.jpg)
postman使用旧版本报错version mismatch detected
卸载 postman又重装了别的版本,打开后遇到了这个报错,解决办法如下: 删除缓存文件 C:\Users\Administrator\AppData\Roaming\Postman 下载PostMan 提取码:6k51...
![](https://www.ngui.cc/images/no-images.jpg)
探索数据的隐藏维度:使用Scikit-Learn进行特征交互性预测
探索数据的隐藏维度:使用Scikit-Learn进行特征交互性预测 在机器学习中,特征交互性是指不同特征之间可能存在的复杂关系,这些关系对预测结果有着重要影响。Scikit-Learn(简称sklearn),作为Python中广受欢迎…...
![](https://img-blog.csdnimg.cn/img_convert/714a6cf9218d4926d2a9e390f209edf9.jpeg)
首个WebAgent在线评测框架和流程数据管理平台来了,GPT-4、Qwen登顶闭源和开源榜首!
在当今科技迅速发展的时代,大型语言模型(Large Language Model,LLM)正以前所未有的速度改变着我们与数字世界的互动方式。基于LLM的智能代理(LLM Agent),从简单的信息搜索到复杂的网页操作&…...
![](https://i-blog.csdnimg.cn/direct/bb12553cdf5c47d3bb516cb277fa949b.png)
UE TSharedPtr
文章目录 概述TSharedPtrTSharedPtr包含2部分 构造,析构,拷贝构造,移动构造构造拷贝构造移动构造 小结 概述 之前写过一篇c的智能指针的,这篇写下ue的。本质上来说是差不多的,可以简单看看。 TSharedPtr 如下图&…...
![](https://img-blog.csdnimg.cn/img_convert/24b84bcfddce4013709c9a41233cbc15.png)
做网站需要那些编程语言/网络营销策略主要包括
文章目录hashmap基础hashmap的nodehashmap的容量hashmap的负载因子hashmap的hash()算法HashMap里面的hash()返回值hashmap的数组链表/树问题hashmap为什么引入链表为什么jdk1.8会引入红黑树呢hashmap为什么一开始不就使用红黑树?HashMap的底层数组取值的时候&#x…...
![](https://img-blog.csdnimg.cn/20210419223520855.png)
专门做澳大利亚项目的网站/常见的搜索引擎有哪些?
LinuxC获取文件的类型1、struct stat介绍2、获取文件类型3、运行效果1、struct stat介绍 我们在Linux中每个文件都对应的有相应的属性,这些属性都保存在一个叫struct stat的结构体中,其中的属性如下。 内核中struct stat 结构体: struct s…...
![](/images/no-images.jpg)
做ppt图表的网站/种子资源地址
参考资料: https://www.cnblogs.com/kumufengchun/p/10384325.html https://www.kancloud.cn/hello123/beego/126138...
![](http://image.evget.com/images/article/2019/embim190.png)
做网站所用的工具/安庆seo
2019独角兽企业重金招聘Python工程师标准>>> 下载Stimulsoft Reports.Ultimate最新版本 Stimulsoft专题页:全面汇集Stimulsoft视频教程、版本更新、使用教程、应用案例和相关开发资源等。 执行以下步骤以创建子报表: 运行设计器连接数据&…...
![](https://images0.cnblogs.com/blog/331622/201305/19122340-83a7d761f263483e84cfd8d8b0b360e1.gif)
潍坊专业网站制作公司营销/企业网站推广模式
转载于:https://www.cnblogs.com/zhouwenwu/archive/2013/05/19/3086688.html...
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
哪里学网站开发/关键词优化推广排名
类和对象 1. 什么叫类:类是一种数据结构,就好比一个模型,该模型用来表述一类食物(食物即数据和动作的结合体),用它来生产真是的物体(实例) 2. 什么叫对象:睁开眼…...