嫌烦 可以直接看结尾
用yourls 搭建短链接地址服务
疫情期间没事瞎折腾,索性就研究了下yourls 。
发现这个玩意功能挺强大的,不但可以批量生成自己的短地址,还可以管理,统计每个短地址点击数量,还可以提供api接口。
最重要的是,这个开源免费,自己拿来做二次开发再适合不过了回帖1楼 是修改方法
下载地址
https://github.com/YOURLS/YOURLS/releases
自家用完全无敌了。2、修改config.php里面的配置参数 (linux上注意:config.php这个文件权限最好跟启动Web服务器用户一致,不然可能加密密码保存不了) 几个重点 Yourls 提供两种 URL 编码形式, 一种是只有小写的 Base 36 encoding 0123456789abcdefghijklmnopqrstuvwxyz, 还有一种是有大小写的 Base 62 encoding 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz, 一般来说,使用默认的 Base 36 即可,因为要使用 Base 62 需要空间支持 php 的 BCMath 扩展,而且没什么必要, 个人用 Base 32 足矣,官方宣称可以创建 4,738,381,338,321,617,846 个短网址, 所以没什么特殊情况就不用修改 config.php ,用默认的编码即可。 后台地址是 http://你的地址/admin/ 当然可以修改 admin 文件夹的名字以防万一 管理员的用户名和密码都在 includesconfig.php 里自己设置,不推荐使用常用的密码 毕竟是明文形式储存,所以想一个复杂点的没用过的密码最好不过。
- define( 'YOURLS_DB_USER', 'root' );
- define( 'YOURLS_DB_PASS', '123456' );
- define( 'YOURLS_DB_NAME', 'yourls' );
- define( 'YOURLS_DB_HOST', 'localhost' );
- define( 'YOURLS_DB_PREFIX', 'yourls_' );
- //上面是数据信息不用多说
- define( 'YOURLS_SITE', 'http://test.com' ); //你自己服务器的域名 用最短的,短地址也是基于这个生成。
- define( 'YOURLS_HOURS_OFFSET', '+8'); //时区偏移
- define( 'YOURLS_LANG', 'zh_CN' ); //这个语言默认是英文,没有中文包,需要自己去 [url]https://github.com/guox/yourls-zh_CN/[/url]下载,放到 user/languages 里面
- define( 'YOURLS_UNIQUE_URLS', true ); //短地址是否唯一
- define( 'YOURLS_PRIVATE', true ); //是否私有,如果私有的,则进行api调用生成短地址时需要传递用户名和密码
- define( 'YOURLS_COOKIEKEY', 'A2C7&H~r80pTps{nIfI8VFpTxnfF3c)j@J#{nDUh' );//加密cookie 去 [url]http://yourls.org/cookie[/url] 获取
- $yourls_user_passwords = array(
- 'admin' => '123456' /* Password encrypted by YOURLS */ , //用户名=>密码 可填多个 登录成功后这里的明文密码会被加密
- );
- define( 'YOURLS_DEBUG', false ); //是否开启调试
- define( 'YOURLS_URL_CONVERT', 36 ); //使用36进制 还是62进制 这个最好一开始设好不要修改,避免地址冲突,建议62进制
- $yourls_reserved_URL = array(
- 'porn', 'faggot', 'sex', 'nigger', 'fuck', 'cunt', 'dick', //排除一下短地址,这些地址是不会生成的
- );
复制代码
nginx 配置里添加
- # Rewrites 主要看这一项配置就够了,路由重写
- location / {
- try_files $uri $uri/ /yourls-loader.php$is_args$args;
- }
- ------
- server {
- # HTTP over IPv4 & IPv6
- listen 80;
- listen [::]:80;
- # HTTPS over IPv4 & IPv6
- listen 443 ssl;
- listen [::]:443 ssl;
- ssl_certificate example.com.crt;
- ssl_certificate_key example.com.key;
- server_name example.com [url]www.example.com[/url];
- # Root directory
- root /path/to/yourls/files;
- # Rewrites 主要看这一项配置就够了,路由重写
- location / {
- try_files $uri $uri/ /yourls-loader.php$is_args$args;
- }
- # PHP engine
- location ~ .php$ {
- include fastcgi.conf;
- # include fastcgi_params;
- fastcgi_index index.php;
- fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
- }
- }
复制代码
3、短地址默认是是按照顺序生成,从1开始,有可能我们想不按照这样顺序,可以推荐用时间戳来生成 只需要修改 includes/functions.php 283行左右 将 $id = yourls_get_next_decimal(); 改为 $id = time(); 4、api接口生成 请求地址:http://域名//yourls-api.php 参数:username(用户名)、password(密码)、format(格式 json)、url(长地址)、action(功能,shorturl)
1、GET请求,构建下get请求,可以直接访问也可以用python构建请求
- http://127.0.0.1/yourls-api.php?username=【登录账号】&password=【密码】&url=【添加的Url】&format=json&action=shorturl
- 或者
- http://127.0.0.1/yourls-api.php?signature=【token】&url=【添加的Url】&format=json&action=shorturl
复制代码
2、python构建get请求
- import requests, json
- url = "http://10.0.0.101/yourls-api.php?"
- data = {"username":"wgpro.com","password":"123456","url":"http://www.baidu.com","format":"json","action":"shorturl"}
- response = requests.get(url, data)
- print(json.loads(response.text))
复制代码
如果不指定format为json的话,默认是XML格式
2、POST请求
用python来发送POST请求测试
这里以form表单形式提交数据,所以不需要将POST的data转为json格式
POST请求的几种编码方式可以参考:帖子底部
- import requests, json
- url = "http://10.0.0.101/yourls-api.php?"
- data = {"username":"wgpro.com","password":"123456","url":"http://www.baidu.com","format":"json","action":"shorturl"}
- response = requests.post(url, data)
- print(json.loads(response.text))
复制代码
3、如果提示504 url过长的话,则在nginx增加
- client_max_body_size 5m;
- client_header_buffer_size 512k;
- large_client_header_buffers 4 512k;
复制代码
如果遇到 Faithfully yours, nginx.错误,可能是cookies过长,可以看
https://blog.csdn.net/wang_quan_li/article/details/41802643
http字段中添加
- proxy_buffer_size 128k;
- proxy_buffers 32 32k;
- proxy_busy_buffers_size 128k;
复制代码
php配置中添加
- fastcgi_buffer_size 128k;
- fastcgi_buffers 4 256k;
- fastcgi_busy_buffers_size 256k;
复制代码
如果还是不行就在location转发中也添加
- proxy_buffer_size 128k;
- proxy_buffers 32 32k;
- proxy_busy_buffers_size 128k;
复制代码
Python使用requests发送post请求
1.我们使用postman进行接口测试的时候,发现POST请求方式的编码有3种,具体的编码方式如下:
A:application/x-www-form-urlencoded ==最常见的post提交数据的方式,以form表单形式提交数据
B:application/json ==以json格式提交数据
C:multipart/form-data ==一般使用来上传文件(较少用)
2.我们使用python做接口测试时,经常使用的方式为:requests.post(url,data),具体我们使用不同的编码方式来做接口测试:
A:Requests以form表单形式发送post请求,具体代码实现如下所示:
- import requests,json
-
- url = 'http://httpbin.org/post'
- data = {'key1':'value1','key2':'value2'}
- r =requests.post(url,data)
- print(r)
- print(r.text)
- print(r.content)
复制代码
A1:运行结果如下所示:
B:Requests以json形式发送post请求,具体代码实现如下所示:
- import requests,json
-
- url_json = 'http://httpbin.org/post'
- data_json = json.dumps({'key1':'value1','key2':'value2'}) #dumps:将python对象解码为json数据
- r_json = requests.post(url_json,data_json)
- print(r_json)
- print(r_json.text)
- print(r_json.content)
复制代码
B1:运行结果如下所示:
C:Requests以multipart形式发送post请求,具体代码实现如下所示:
- import requests,json
-
- url_mul = 'http://httpbin.org/post'
- files = {'file':open('E://report.txt','rb')}
- r = requests.post(url_mul,files=files)
- print(r)
- print(r.text)
- print(r.content)
复制代码
C1:运行结果如下所示:
注:E://report.txt==自定义,具体根据自己放的目录来定义,内容随意
优化下连接格式
修改自定义格式
Q:什么要修改自定义格式
a:在英文中有很多难以辨识的单词。如果有需要自行修改。
容易混淆的英文与数字有!
36字段 全小写
1和l
o和o
2和z
9和g
5和s
vv和w
nn和m
修改
\includes\ifunctions.php
$charset = '0123456789abcdefghijklmnopqrstuvwxyz';
改为 $charset = '34678abcdefhijkpqrtuxy';
就是23进制了
如果使用 时间戳 长度是7位
- 位置 20行
- if( defined('YOURLS_URL_CONVERT') && in_array( YOURLS_URL_CONVERT, array( 62, 64 ) ) ) {
- $charset = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
- } else {
- // defined to 36, or wrongly defined
- $charset = '0123456789abcdefghijklmnopqrstuvwxyz';
- }
复制代码
缺点
被屏蔽掉的数字字母,将无法使用(包括 自定义域名)
例:http://s.isbt.cn/232
上面的方法 配合时间戳生成 7位长度
下面的方法 是自家用格式
起始格式 210 220 290 990
年后两位 2021年 取21 +十进制ID递增
278行处参考以下修改
-
- //$id =yourls_get_next_decimal(); //使用整数递增+1删除以下
- //$id = time(); //使用时间戳 删除 //add 开始至结束
- $id = date ( "y"). '0'; //去年后两位 如2021年 取得21+数字格式 组合后例210开始
- //$id = '230';//测试
- //add 修改的开始
- //如果 当前年 = 库记录内年
- if ( date ( "y") == substr(yourls_get_next_decimal() ,0,2))
- //if ( '23' == substr(yourls_get_next_decimal() ,0,2))//测试用
- {
- # code...获取数据库内顺延编号 如 21 889 去除前两位年 得到 889
- $xid =substr(yourls_get_next_decimal() ,2);
- //遇到9 99..
- if ($xid== '' or $xid== '9' or $xid == '99' or $xid =='999' or $xid =='9999' or $xid =='99999' or $xid =='999999' or $xid =='9999999' or $xid =='99999999' or $xid =='999999999' or $xid =='9999999999')
- {
- $id = date ( "y").'0'.$xid; //new id 进位添加0 如 099
- //$id = '230'.$xid; //测试用
- }
- else
- {
- $id =yourls_get_next_decimal();
- }
-
- }
- else
- {
- # code...
- //当前年改变如新一年 23年则重新生成id 从230开始
- $id = date ( "y").'0'; //new id
- //$id = date ( "23").'0'; //测试用
- }
- //add 结束
复制代码
本人使用的 十进制 格式 年 2021年 取末尾 21年 + 十进制ID递增
格式:年+0
例 210 //21年第一个
220 22 年第一个
990 22 年第一个
遇9 添0 为了下次递增 方便进位 否则 就会进位至日期
例 219 21年第一9个
218 --> 2109 -->2110
21998 -->210999 -->211000
尴尬!
看见一个官方插件地址 似乎有可以自定义格式的插件
https://github.com/YOURLS/awesome#plugins
放在 \user\plugins里
实用插件总结
快速下载你的插件 (放在 \user\plugins里 新建一个文件夹比如叫down 在吧plugin.php放进去)
https://github.com/krissss/yourls-download-plugin
密码保护您想要的任何短 URL,以便在重定向之前提示用户输入密码。
https://github.com/MatthewC/yourls-password-protection
如何防止 YOURLS 检查更新
https://github.com/YOURLS/YOURLS/issues/2851
热门点击- 显示过去几天点击次数最多的链接的顶部。
https://github.com/miconda/yourl ... gins/popular-clicks
显示在特定时间范围内哪些短链接被点击最多
https://github.com/vaughany/yourls-popular-clicks-extended
在 YOURLS 中创建和显示 QR 码
https://techlister.com/plugins-2/qrcode-plugin-for-yourls/
不计算短 URL 的点击次数。
https://github.com/vipwangtian/yourls-skip-click-count
自定义短链接格式 (新版本不能用得自己好好分辨)
https://github.com/josheby/yourls-additional-charsets
JSON 响应
https://github.com/tessus/yourls-json-response
|
|