bashシェルスクリプト内でpastebin( 「API」機能を介して)を使用することは可能ですか?http-postを送信するにはどうすればよいですか?URLを取り戻すにはどうすればよいですか?
11 に答える
pastbin.comが公開APIを閉じたとき、私は代替手段を探していました。
スプランジは素晴らしいです。使用法:
<command> | curl -F 'sprunge=<-' http://sprunge.us
または、私がそれを使用するとき:
alias paste="curl -F 'sprunge=<-' http://sprunge.us"
<command> | paste
ドキュメントPOST
には、リクエストを送信する必要があると記載されています
http://pastebin.com/api_public.php
唯一の必須パラメータはpaste_code
、です。文字列型は、作成する貼り付けです。
成功すると、新しいpastebin
URLが返されます。
コマンドを使用して、bashシェルからこれを簡単に行うことができますcurl
。
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'
あなたの中に以下を入れてください.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
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'
現在のところ、3つの重要なフィールドがあります:
api_dev_key
->それを取得するには、pastebin.comにログインを作成する必要があります->
api_option
投稿するフォーマット
api_paste_code
->投稿したいテキスト
https://paste.c-net.org/には、それらすべてよりも単純なAPIがあります。単にそれに「POST」します。
ウェブサイトから:
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とは異なり、paste.c-net.orgは、スクリプトが出力を生成するのに5秒以上かかる場合でもタイムアウトしません。
$ { sleep 10; ls /; } | nc termbin.com 9999
$ { sleep 10; ls /; } | nc paste.c-net.org 9999
https://paste.c-net.org/ExampleOne
他の2つの回答(2014年頃から)はhttp://sprunge.usを指しています。これは、このように使用するように設計されています...
curl --form 'sprunge=@yourfile.txt' sprunge.us
ただし、2018年の時点で、sprunge.usは過負荷になり、すべてのリクエストに500内部サーバーエラーを返す傾向があります。300KB以上2.8MB以下のファイルの場合、 http ://ix.ioの非常によく似たサービスで幸運を祈りました。
curl --form 'f:1=@yourfile.txt' ix.io
少なくとも2.8MBまでのファイル(そしておそらくそれ以上、私にはわかりません)については、より高度に洗練されたhttps://transfer.shを見つけました。少し異なり、より単純なコマンドラインを推奨し、以下を必要 https
とします(それなしでは機能しません):
curl --upload-file yourfile.txt https://transfer.sh
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/
必要なようです
ペーストビンに投稿する最も簡単な方法
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
れ、各行の末尾に改行が追加されて、複数行の入力を処理できるようになります。@-
stdinから読み取るように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
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をご覧ください。
このページの別の回答に基づいて、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