Как использовать 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