Linux之Curl

前言

需要适量掌握点shell常识

  1. =左右两边是没有空格的
  2. 单引号中特殊字符为纯文本,双引号则保持原有特性
  3. 『`命令`』或 『$(命令)』用于包裹整个命令
  4. 若该变量需要在其他子程序运行,则需要以 export 来使变量变成环境变量
  5. 取消变量的方法为使用 unset

Curl

一个简单的GET请求

1
curl https://www.mobenw.cn/

相关参数

1
2
3
4
5
6
7
-H 请求头,设置一个请求头"name: value"格式
-A UA头
-d 请求体,键值对形式
-F 表示上传文件 格式为:"file=@FILE_PATH"
-k 跳过 SSL 检测
-s 去掉控制台输出的请求信息
-X 请求方式,常用的POST、GET

尝试

这里采用以前常用的图床 Freebuf

以前觉得香香的访问速度贼快,可是自从他加了防盗链之后就不适合做图床了

简单的测试

1
curl -X POST 'https://www.freebuf.com/buf/plugins/ueditor/ueditor/php/imageUp.php'-F 'upfile=@"./img.jpg"'

接口返回的内容为

1
{'url':'images/20220121/16427621503296.jpg!small','title':'','original':'15563722119316.jpg','state':'SUCCESS'}

返回的是一个json格式,Typroa所需要的是一个图片的链接(String)

于是乎需要对响应体进行json处理

虽说 awk sed能够处理,但编写起来还是不方便,不如直接使用第三方库

参考

使用python3处理数据

1
curl -sX POST 'https://www.freebuf.com/buf/plugins/ueditor/ueditor/php/imageUp.php' -F 'upfile=@"./img.jpg"' | python3 -c "import sys, json; print('https://image.3001.net/'+json.loads(sys.stdin.readline().replace('\'','\"'))['url'].split('!')[0])"

由于返回值是非标准的json,需要将单引号转化为双引号,于是这里在python中进行了一系列处理

功能上基本实现了,再根据Typroa的接口进行调整

接口采用的是 『Command <arg1> <arg2>』

于是需要将命令写入到.sh文件中,并使图片路径以参数形式传入

1
2
3
4
5
6
7
8
9
#!/bin/bash
for path in "$@"; do
res=$(
curl -sX POST 'https://www.freebuf.com/buf/plugins/ueditor/ueditor/php/imageUp.php' -F 'upfile=@"'$path'"' |
python3 -c "import sys, json; print('https://image.3001.net/'+json.loads(sys.stdin.readline().replace('\'','\"'))['url'].split('!')[0])"
)
echo $res
done