web-dev-qa-db-ja.com

CURLを使用してファイルの内容をPOSTする

(以下は裏話です。必要に応じて[質問:]にジャンプできます)

私のコースの1つにWebページがあります 入力テキスト(Pythonコードであることが予期される)を受け入れ、トークン化された応答を返します。これは、作成しているPythonレクサーのリファレンスとして使用するためのものです。私はテストプロセスを自動化し、ブラウザーを開いたり、テキストを前後にコピーしたりすることなくコードをチェックできるようにしています。つまり、ここで私がやろうとしていることは次のとおりです。

「x.py」という名前のサンプルpythonファイルがあり、そのフォームに入力したかのようにサーバーに投稿したいと思います。私はもう試した:

curl --data-urlencode "[email protected]" http://matt.might.net/apps/pylex/pylex.php

ただし、残念ながら、ファイルのコンテンツとして"@x.py"が投稿されているようです(つまり、"[email protected]"は、投稿されているものであり、"file=<contents-of-x.py>"ではありません)。私は--form--dataを試しましたが、どちらもうまくいきませんでした。

質問:具体的には、URLエンコードされていないコンテンツを含むファイルがあり、このファイルのコンテンツをPOSTおよび特定の名前(この場合はfile)に関連付けられている場合、これを行う正しい方法は何ですか?

15
Cornstalks

あなたが欲しいのは"[email protected]" (番号 =)。

curlから manpage

name @ filenameこれにより、特定のファイル(改行を含む)からデータをcurlロードし、そのデータをURLエンコードしてPOSTに渡します。名前の部分には等号が追加され、name = urlencoded-file-contentになります。この名前はすでにURLエンコードされていることが想定されていることに注意してください。

25
qmega

Qmegaの回答は承認済みのままにしておきますが、読みやすくするために、ここにもコメントにコメントを残しておきます。これを行うもう1つの方法は、"file=`cat x.py`"を指定することです。完全なコマンドの場合は、次のようになります。

curl --data-urlencode "file=`cat x.py`" http://matt.might.net/apps/pylex/pylex.php
2
Cornstalks