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
}
EOF

curl -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.



评论

The Hot3 in Last 30 Days

RackNerd VPS搭V2Ray WSS梯子 年付 $10.98 1G端口 3T流量 17G存储 1GB内存