Как использовать pastebin из оболочки script?
Можно ли использовать pastebin (может быть через их "API" функциональность) внутри сценариев оболочки bash? Как мне отправить http-пост? Как мне вернуть URL?
Ответы
Ответ 1
Документация сообщает, что вам нужно отправить запрос POST
на
http://pastebin.com/api_public.php
и единственным обязательным параметром является paste_code
, строка типа - это вставка, которую вы хотите сделать.
При успешном завершении будет возвращен новый pastebin
URL.
Вы можете легко сделать это из своей оболочки bash, используя команду curl
.
curl
использует параметр -d
для отправки данных POST
на указанный URL.
Demo:
Эта демонстрация создаст новую пасту с кодом:
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'
Ответ 2
Когда pastebin.com закрыл свои публичные API, я искал альтернативы.
Sprunge отлично. Использование:
<command> | curl -F 'sprunge=<-' http://sprunge.us
или, как я это использую:
alias paste="curl -F 'sprunge=<-' http://sprunge.us"
<command> | paste
Ответ 3
Поместите в .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
API для публикации в pastebin изменился после публикации codaddict.
Подробности можно найти по этой ссылке: 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
→ Текст, который вы хотите опубликовать
Ответ 5
Два других ответа (примерно с 2014 года) указывают на http://sprunge.us, который предназначен для использования следующим образом...
curl --form '[email protected]' sprunge.us
Однако с 2018 года sprunge.us имеет тенденцию быть перегруженным и возвращать 500 внутренних ошибок сервера для каждого запроса. Для файлов размером не менее 300 КБ, но не выше 2,8 МБ, мне очень повезло с очень похожим сервисом на http://ix.io:
curl --form 'f:[email protected]' ix.io
Для файлов размером не менее 2,8 МБ (а может и выше, я не знаю) я нашел более отполированный https://transfer.sh. Он рекомендует немного другую и более простую командную строку и требует https
(без него работать не будет):
curl --upload-file yourfile.txt https://transfer.sh
Ответ 6
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 -s --data-binary @'/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 -s --data-binary @- 'https://paste.c-net.org/'
$ ./bin/hello_world | curl -s --data-binary @- 'https://paste.c-net.org/'
Ответ 7
Я не уверен, но я думаю, что этот вопрос принадлежит суперпользователю. В любом случае...
Вы можете использовать wget для отправки данных POST (через опцию --post-data
или --post-file
). Подробнее см. справочная страница.
Ответ 8
Я обнаружил, что 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-адрес для вставки.
Примечание: завершающий /
в URL http://dpaste.com/api/v2/
кажется необходимым
Ответ 9
Вот как я предпочитаю наклеивать пастибин:
echo 'your message' | sed 's/^/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 (скопируйте и вставьте ее в свой терминал и установите соответствующее поле API_KEY
:
pastebin () {
API_KEY=''
if [ -z $1 ]
then
cat - | sed 's/^/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 's/^/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
}
Вы можете запустить его одним из следующих способов:
pastebin 'your message'
или если вам нужно передать в него файл:
cat your_file.txt | pastebin