https://image.familystudy.cn/image/generic/avatar.jpg

消失在彩霞里的博客

部署技巧——内网穿透

内网穿透 ngrok快速穿透 优点:简单,新手上手很快。 缺点:依赖别人的服务器,每次生成的url不同。 frp自由配置 frp可快速实现端口代理,可将本地和服务器、服务器之间端口转发。 下载对应的frp版本,windows或linux版。 配置文件 frp的目录如下 -frp -frpc -frps -frpc.ini -frpc.toml -frps.toml s代表服务端,也就是提供端口服务的主机,c代表客户端,也就是需要转发的主机 下面以frpc.ini为例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [common] server_addr = xx.xx.xx.xx server_port = bind_port [ssh] ;配置ssh端口,用于在其他服务器上访问该服务器 type = tcp local_port = xxx ;本机端口 local_ip = 127.0.0.1 remote_port = xxx ;远程端口 [http] ;配置http type = tcp local_port = xxx ;本机端口 local_ip = 127.0.0.1 remote_port = xxx ;远程端口 frps.

爬虫技巧

爬虫技巧 抓包 F12查看网络请求,复制cURL(Bash) 点击爬虫代码生成器,生成多种变成语言爬虫代码 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 headers = { 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.42', } params = { 'tn': 'resultjson_com', 'word': query, 'pn': pageNum } response = requests.get('https://image.baidu.com/search/acjson', params=params, headers=headers).json() info = response['data'] parsed_info = parse_info(info) for url in parsed_info: save_image(url['url']) Bs解析 直接requests.

后端杂谈(二)

Java开发 上期我们主要讲述了后端springboot开发规范和一些基本配置,现在阐述一些常用技巧。 如发邮件、微信配置等,这些都十分简单但易忘,故集中整理。 微信接口集成 调用微信官方api即可。 核心要素为api_key和api_secret,配置在yaml中。 accessToken的获取 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 public static String getAccessToken() throws Exception{ HttpClient httpClient = new HttpClient(); String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + secret; GetMethod getMethod = new GetMethod(url); getMethod.addRequestHeader("accept", "*/*"); //设置Content-Type,此处根据实际情况确定 getMethod.addRequestHeader("Content-Type", "application/x-www-form-urlencoded"); String result = ""; try { int statusCode = httpClient.

后端杂谈(一)

Java开发 开发规范 使用dto封装类实现数据传输,少用Map。 使用@RequestBody和@RequestParam接收请求参数。 接口类型一般为GET、POST、DELETE。 统一使用{“code”: “”, “msg”: “”, data: “"} 的规范返回数据。其中200代表正常,500代表错误。 统一使用全局异常处理,少用try catch,保证代码简洁性。 数据具有关联性时,使用逻辑删除代替物理删除。 统一使用jwt token,从中读取用户信息。防止平行越权漏洞。 加入必要的注释,便于多人合作。 开发者更新后上传jar包至服务器,同时将最新代码commit到github上。 变量名统一小驼峰,类名大驼峰 全局异常处理 GlobalExceptionHandler SSL的配置 笔者在之前的博客中阐述了nginx部署ssl证书的方式。与此同时,后端也务必加上ssl证书。因为微信小程序等平台校验域名合法性。 与之前稍有不同的是,springboot部署ssl证书要求的是jks格式证书。可采用线上工具将证书合成为jks。 配置过程非常简单,简述如下。 application.yaml 1 2 3 4 5 6 7 server:port:8083# 示例ssl:enabled:truekey-store:classpath:ssl/api.xxx.cn.jkskey-store-password:passwordkey-store-type:JKS HttpsConfig.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 @Configuration public class HttpsConfig { @Value("${custom.

前端杂谈

前端杂谈(一) 前端项目集锦 原生 叮当葫芦-认知障碍数据分析平台 “认知障碍数据分析平台” Jquery Vue vue-element-admin “水果电商后台服务端” uniapp React “智问领航” ant-design-pro 函数封装思维 API接口封装 封装request.js用于ajax请求 利用Promise的特性,封装axios、ajax、uni.request、taro.request等等 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 export const request = ({ url, method, data, headers }) => { return new Promise((resolve, reject) => { const xhr = new XMLHttpRequest(); // 如果是 GET 请求,将 data 转为查询参数 if (method.

前端杂谈

前端杂谈(一) 前端项目集锦 {0}### 原生 叮当葫芦-认知障碍数据分析平台 “认知障碍数据分析平台” Jquery Vue vue-element-admin “水果电商后台服务端” uniapp React “智问领航” ant-design-pro 函数封装思维 API接口封装 封装request.js用于ajax请求 利用Promise的特性,封装axios、ajax、uni.request、taro.request等等 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 export const request = ({ url, method, data, headers }) => { return new Promise((resolve, reject) => { const xhr = new XMLHttpRequest(); ​ // 如果是 GET 请求,将 data 转为查询参数 if (method.