CURLを使用してファイルのコンテンツをPOSTする


15

(以下はバックストーリーです。必要に応じて「質問:」にジャンプできます)

入力テキスト(Pythonコードであると予想される)を受け入れ、トークン化された応答を提供する私のコースの1つのWebページがあります。これは、私たちが書いているPython字句解析プログラムのリファレンスとして使用することを意図しています。テストプロセスを自動化し、ブラウザを開いたり、テキストを前後にコピーしたりせずにコードをチェックできるようにしようとしています。

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

curl --data-urlencode "file=@x.py" http://matt.might.net/apps/pylex/pylex.php

しかし、残念ながら、"@x.py"ファイルの内容として投稿されているようです(つまり、投稿されているのではなく、投稿されている"file=@x.py"ので"file=<contents-of-x.py>")。私が試した--formし、--dataしかし、それらはどちらか働いていません。

質問: 特に、URLエンコードされていないコンテンツを持つファイルがあり、このファイルのコンテンツがPOSTの一部であり、特定の名前(この場合はfile)に関連付けられている必要がある場合、これを実現する正しい方法は何ですか?



それを答えとして投稿してみませんか?あなたは自分の質問に答えることができ、それから2日か何かで(どれくらいの期間かわからない)あなたはそれを受け入れることができる。
-BenjiWiebe

@ BenjiWiebe:申し分なく、私はそれを投稿します。
トウモロコシ茎

回答:


25

あなたが望むのは"file@x.py"(いいえ=)です。

curl マンページから:

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


2

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

curl --data-urlencode "file=`cat x.py`" http://matt.might.net/apps/pylex/pylex.php
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.