概要
shell2http でファイルを受け取る方法を紹介します
クライアント側は curl, ruby, python で試してみました
環境
- macOS 10.15.7
- shell2http 1.13
準備
過去の記事を参考にインストールしてください
form を使ってファイルを受け取る
--form
オプションを使います
受け取ったファイルの情報はリダイレクトすることでファイルとして保存します
shell2http --form /upload 'cat $filepath_uploadfile > uploaded_file.dat'
curl で試す
test.dat
というファイルを送ってみます
curl -X POST -F uploadfile=@./test.dat localhost:8080/upload
サーバ側では uploaded_file.dat
という名前で保存されているのが確認できると思います
また uploadfile=
の部分がフォームとして送られるファイルの名前になるのでここが uploadfile2 などになるとリクエストは送信できますがサーバ側で指定のファイルがないため uploaded_file.dat
が空で生成されます
エラーにならないので注意してください
Ruby で試す
net/http の post_form
を使っています
require 'net/http'
require 'uri'
url = URI.parse('http://localhost:8080/upload')
http = Net::HTTP.new(url.host, url.port)
req = Net::HTTP::Post.new(url.path)
filename = 'test.dat'
f = open("./#{filename}")
query = [
[ 'uploadfile', f, { uploadfile: filename } ]
]
req.set_form(query, "multipart/form-data")
ret = http.request(req)
ret.to_hash
Python で試す
標準ライブラリの urllib を使いたかったのですが情報が少なく requests を使いました
pipenv install requests
vim upload.py
import requests
url = 'http://localhost:8080/upload'
file = {'uploadfile': open('test.dat', 'rb')}
res = requests.post(url, files=file)
print(res)
pipenv run python upload.py
最後に
shell2http で form を使ってファイルを受け取る方法を紹介しました
クライアント側は POST で multipart/form-data
でファイルを送信すれば良さそうです
0 件のコメント:
コメントを投稿