如何从shell脚本中使用pastebin?

问题描述 投票:0回答:12

是否可以在bash shell脚本中使用pastebin(可能通过其“API”功能)?如何发送http-post?如何取回 URL?

http bash shell url pastebin
12个回答
24
投票

当pastebin.com 关闭他们的公共API 时,我一直在寻找替代方案。

Sprunge很棒。用途:

<command> | curl -F 'sprunge=<-' http://sprunge.us

或者,当我使用它时:

alias paste="curl -F 'sprunge=<-' http://sprunge.us"
<command> | paste

8
投票

文档表示您需要向

提交
POST

请求
http://pastebin.com/api_public.php

唯一的强制参数是

paste_code
,字符串类型是您要制作的粘贴。

成功后,将返回新的

pastebin
URL。

您可以使用命令

curl
在 bash shell 中轻松完成此操作。

curl
使用
-d
选项将
POST
数据发送到指定的 URL。

演示:

此演示将使用以下代码创建一个新粘贴:

printf("Hello..I am Codaddict");

从你的外壳:

$ curl -d 'paste_code=printf("Hello..I am Codaddict");' 'http://pastebin.com/api_public.php'
http://pastebin.com/598VLDZp
$

现在,如果您看到 URL http://pastebin.com/598VLDZp,您就会看到我的粘贴:)

或者,您可以使用

wget
命令来执行此操作,该命令使用选项
--post-data
来发送
POST
值。

我已经尝试过这个命令,效果很好:

wget --post-data 'paste_code=printf("Hello..I am Codaddict");' 'http://pastebin.com/api_public.php'

6
投票

将以下内容放入您的

.bashrc
中:

sprunge() {
  if [[ $1 ]]; then
    curl -F 'sprunge=<-' "http://sprunge.us" <"$1"
  else
    curl -F 'sprunge=<-' "http://sprunge.us"
  fi
}

...然后你可以运行:

sprunge filename # post file to sprunge

...或者...

some_command | sprunge # pipe output to sprunge

4
投票

https://paste.c-net.org/ 的 API 比所有这些都更简单。只需“发布”即可。

来自网站:

Upload text using curl:
$ curl -s --data 'Hello World!' 'https://paste.c-net.org/'

Upload text using wget:
$ wget --quiet -O- --post-data='Hello World!' 'https://paste.c-net.org/'

Upload a file using curl:
$ curl --upload-file @'/tmp/file' 'https://paste.c-net.org/'

Upload a file using wget:
$ wget --quiet -O- --post-file='/tmp/file' 'https://paste.c-net.org/'

Upload the output of a command or script using curl:
$ ls / | curl --upload-file - 'https://paste.c-net.org/'
$ ./bin/hello_world | curl -s --data-binary @- 'https://paste.c-net.org/'

您也可以简单地使用netcat。与 termbin 不同,如果您的脚本生成输出的时间超过 5 秒,paste.c-net.org 不会超时。

$ { sleep 10; ls /; } | nc termbin.com 9999
$ { sleep 10; ls /; } | nc paste.c-net.org 9999
https://paste.c-net.org/ExampleOne

2
投票

自 codaddict 发布以来,用于发布到 Pastebin 的 API 已更改。
详细信息可以通过此链接找到:https://pastebin.com/api

示例:


curl -d 'api_paste_code=printf("Hello..\n I am Codaddict");' \
     -d 'api_dev_key=<get_your_own>' \
     -d 'api_option=paste' 'http://pastebin.com/api/api_post.php'

目前有三个基本字段:

api_dev_key
-> 您需要在pastebin.com 上创建一个登录才能获得该权限
api_option
-> 发帖格式
api_paste_code
-> 您要发布的文字


2
投票

另外两个答案(大约 2014 年)指向 http://sprunge.us,它的设计目的是这样使用...

curl --form '[email protected]' sprunge.us

但是,截至 2018 年,sprunge.us 有过载的趋势,每个请求都会返回 500 内部服务器错误。对于至少 300 KB 但不超过 2.8 MB 的文件,我很幸运地在 http://ix.io:

上获得了非常类似的服务
curl --form 'f:[email protected]' ix.io

对于至少 2.8 MB 的文件(也许更高,我不知道),我发现了更完善的 https://transfer.sh。它建议使用稍微不同且更简单的命令行,并且 requires

https
(没有它就无法工作):

curl --upload-file yourfile.txt https://transfer.sh

2
投票

我发现 Sprunge 目前已关闭,但 dpaste.com 有一个简单的 API

从 STDIN 发布

curl -s -F "content=<-" http://dpaste.com/api/v2/

来自文件

foo.txt

cat foo.txt | curl -s -F "content=<-" http://dpaste.com/api/v2/

发布字符串

curl -s -F "content=string" http://dpaste.com/api/v2/

响应将是粘贴的纯文本 URL。


Nb: URL 中的尾随

/
http://dpaste.com/api/v2/
似乎是必要的


1
投票

发布到pastebin的最简单方法

echo 'your message' | sed '1s/^/api_paste_code=/g' | sed 's/$/\%0A/g' | curl -d @- -d 'api_dev_key=<your_api_key>' -d 'api_option=paste' 'http://pastebin.com/api/api_post.php'

只需更改

<your_api_key>
部分并将您想要的任何内容输入其中即可。

sed
调用将
api_paste_code
参数添加到消息的开头,并在每行末尾添加换行符,以便它可以处理多行输入。
@-
告诉curl 从标准输入读取。

可以粘贴的 Bash 函数

为了方便重用,请将其设为 bash 函数(将其复制并粘贴到终端中并适当设置

API_KEY
字段:

pastebin () {
  API_KEY='<your_api_key>'
  if [ -z $1 ]
  then
    cat - | sed '1s/^/api_paste_code=/g' | sed 's/$/\%0A/g' | curl -d @- -d 'api_dev_key='"$API_KEY"'' -d 'api_option=paste' 'http://pastebin.com/api/api_post.php'
  else
    echo "$1" | sed '1s/^/api_paste_code=/g' | sed 's/$/\%0A/g' | curl -d @- -d 'api_dev_key='"$API_KEY"'' -d 'api_option=paste' 'http://pastebin.com/api/api_post.php'
  fi
  printf '\n'
}

您可以使用以下任一方式运行它:

pastebin 'your message'

或者如果您需要将文件通过管道传输到其中:

cat your_file.txt | pastebin


1
投票

基于 Vishal 的答案,pastebin 已升级为现在仅使用 HTTPS:

curl -d 'api_paste_code=printf("Hello World");' \
     -d 'api_dev_key=<your_key>' \
     -d 'api_option=paste' 'https://pastebin.com/api/api_post.php'

您不必指定

-X POST
参数

更多详细信息可以在这里找到: https://pastebin.com/doc_api#1


0
投票

基于本页上的另一个答案,我编写了以下脚本,该脚本从 STDIN 读取(或假设输出通过管道传输到其中)。

此版本允许使用 URI 转义的任意数据(通过

jq

)。

#!/bin/bash api_key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX curl -d "api_paste_code=$(jq -sRr @uri)" \ -d "api_dev_key=$api_key" \ -d 'api_option=paste' 'https://pastebin.com/api/api_post.php' echo # By default, there's no newline
    

0
投票
我写这篇文章有点晚了,但我创建了一个小工具来帮助解决这个问题。

https://pasteshell.com/

请随时查看并告诉我您的想法。

谢谢,


-1
投票
你会发现它目前已关闭,但 parsebin.com 有一个基本的 API。

https://parsebin.com/net-support/

© www.soinside.com 2019 - 2024. All rights reserved.