Linux 命令行 curl 用POST方法 调用pastebin系统 API 添加文本文件
我们已经有了利用免费worker搭建的短链系统, 通过配置参数设置为网络记事本 Pastebin, 用于保存自己的翻墙节点订阅信息, 或者是clash的配置文件.
在某些场景下, 你在Linux环境下已经有了订阅信息的文件(或者clash的配置文件), 不想搞什么复制粘贴, 鼠标点点点, 就想命令行直接一键上传到短链系统(网络记事本 Pastebin)中. 那么, 可以使用 curl 命令, 用POST方法 调用短链系统的 API
实践
假设,
你要上传的文件名 bigdan.yaml
你的短链系统 URL https://pastebin.crazypeace.workers.dev/
你的短链系统的密码 tieludasiliqiuweiyue
那么,
file_content_escaped=$(cat bigdan.yaml | jq -s -R)cat <<EOF >json_data{"cmd": "add","key": "bigdan.yaml","password": "tieludasiliqiuweiyue","url": $file_content_escaped}EOFcurl -H "Content-Type: application/json" -X POST -d @json_data https://pastebin.crazypeace.workers.dev/
========
过程
如果是简单参数的API调用, 可以手搓JSON结构, 这样:
json_data='{"cmd": "add","key": "cpgg","password": "tieludasiliqiuweiyue","url": "https://github.com/crazypeace"}'curl -H "Content-Type: application/json" -X POST -d "$json_data" https://pastebin.crazypeace.workers.dev/
这种方式不涉及创建文件, 但手搓JSON格式, 容易漏符号出错. 也不适合搓复杂的JSON结构.
如果你的各个参数是变量, 比如, 有一个很长的变量是这样的:
token="abcdefghijklmnopqrstuvwxyz1234567890"for i in {1..100}; do token1="$token1 $token"; done
我要保存这个token1, 那么可以这么用:
json_data=$(jq --arg cmd "add" --arg key "bigpara" --arg password "tieludasiliqiuweiyue" --arg url "$token1" '.cmd = $cmd | .key = $key | .password = $password | .url = $url' <<< '{}')curl -H "Content-Type: application/json" -X POST -d "$json_data" https://pastebin.crazypeace.workers.dev/
* 插一句, 如果JSON结构比如复杂, 用jq来构造不容易出错, 也方便维护修改.
比如,
jq --arg cmd "add" --arg key "bigpara" --arg password "tieludasiliqiuweiyue" --arg url "https://github.com/crazypeace" '.cmd = $cmd | .kv.key = $key | .password = $password | .kv.url = $url' <<< '{}'
生成的结构就是这样的:
{"cmd": "add","kv": {"key": "bigpara","url": "https://github.com/crazypeace"},"password": "tieludasiliqiuweiyue"}
但是, 如果这个变量再长一点, 比如, 我们再扩大10倍.
for i in {1..10}; do token2="$token2 $token1"; done
再这样去调用
json_data=$(jq --arg cmd "add" --arg key "bigbigpara" --arg password "tieludasiliqiuweiyue" --arg url "$token2" '.cmd = $cmd | .key = $key | .password = $password | .url = $url' <<< '{}')curl -H "Content-Type: application/json" -X POST -d "$json_data" https://pastebin.crazypeace.workers.dev/
你会发现, jq的命令会报错, 参数太长.
-bash: /usr/bin/jq: Argument list too long
所以, 我们用写在正文最前面的那个方法.
========
后记
我的短链系统 默认是验证 短链 是否冲突的. 如果你希望系统不要校验, 那么修改一下这个配置项为 true
overwrite_kv: true
否则的话, 添加冲突的短链, 命令行会报错.
Error: Specific key existed.
评论
发表评论