パラメータgimmeflag
および値please
を含むGETおよびPOSTリクエストを、コマンドラインでcurl
を使用してURL http://103.200.7.150:7777/
に送信するにはどうすればよいですか?
チュートリアルや本を読んでいるように見えますが、これは基本を理解したかどうかをテストするための生意気な方法です。
Curlまたはブラウザ経由で http://103.200.7.150:7777/ を呼び出すと、次の出力が生成されます。
リクエストメソッドGETとPOSTをパラメーター「gimmeflag」と値「please」とともに送信してください
curl
( man 1 curl
または curl manual を参照)でどのように処理されるかを知りたいので、2つの部分に分けましょう。
GETを使用してリクエストを送信する:
query-string
がどのように見えるかを知っていれば、これは非常に簡単です。
World Wide Webでは、クエリ文字列は、階層パス構造にうまく収まらないデータを含むUniform Resource Locator(URL)の一部です。通常、クエリ文字列には、たとえばHTMLフォームの一部として、Webブラウザまたは他のクライアントアプリケーションによってベースURLに追加されたフィールドが含まれます。
Webサーバーは、URLパスに基づいてファイルシステムからファイルを読み取るか、リソースのタイプに固有のロジックを使用して要求を処理することにより、ハイパーテキスト転送プロトコル要求を処理できます。特別なロジックが呼び出される場合、クエリ文字列は、URLのパスコンポーネントとともに、そのロジックで使用できます。( source )
パラメーターgimmeflag
と値please
を送信します。したがって、curl
で要求する行は次のとおりです。
curl -X GET http://103.200.7.150:7777/?gimmeflag=please
サーバーから返される結果:
KSL {n0w_y0u_Know_How_To
POSTを使用してリクエストを送信します:
GET行を指定すると、POSTも非常に簡単です。GETをPOSTに置き換えるだけです。
curl -X POST http://103.200.7.150:7777/?gimmeflag=please
サーバーから返される結果:
_S3nD_r3quesT_Meth0d_GET_AND_POST}
これを結論付けるには:
# Thanks to @pa4080 for this line
printf '%s%s\n' \
"$(curl -X GET http://103.200.7.150:7777/?gimmeflag=please 2>/dev/null)" \
"$(curl -X POST http://103.200.7.150:7777/?gimmeflag=please 2>/dev/null)"
KSL {n0w_y0u_Know_How_To_S3nD_r3quesT_Meth0d_GET_AND_POST}
この回答は、 @ Videonauthの回答 、の結果を達成する方法を示していますが、wget
を使用しています。
$ wget -qO- http://103.200.7.150:7777/
Please send me request method GET and POST with params "gimmeflag" and value "please"
$ wget -qO- http://103.200.7.150:7777/?gimmeflag=please # GET is the default request
KSL{n0w_y0u_Know_How_To
$ wget -qO- --post-data '' http://103.200.7.150:7777/?gimmeflag=please # Simple POST req.
_S3nD_r3quesT_Meth0d_GET_AND_POST}
$ printf '\n%s%s\n' \
"$(wget -qO- http://103.200.7.150:7777/?gimmeflag=please 2>/dev/null)" \
"$(wget -qO- --post-data '' http://103.200.7.150:7777/?gimmeflag=please 2>/dev/null)"
KSL{n0w_y0u_Know_How_To_S3nD_r3quesT_Meth0d_GET_AND_POST}
man wget
から:
-O file; --output-document=file - The documents will not be written to the appropriate
files, but all will be concatenated together and written to file. If '-' is used
as file, documents will be printed to standard output, disabling link conversion...
-q; --quiet - Turn off Wget's output.
--post-data=string; --post-file=file - Use POST as the method for all HTTP requests
and send the specified data in the request body. --post-data sends string as data,
whereas --post-file sends the contents of file. Other than that, they work in
exactly the same way. In particular, they both expect content of the form
"key1=value1&key2=value2", with percent-encoding for special characters...
Only one of --post-data and --post-file should be specified... This example shows
how to log in to a server using POST and then proceed to download the desired pages,
presumably only accessible to authorized users:
# Log in to the server. This can be done only once.
wget --save-cookies cookies.txt --post-data 'user=foo&password=bar' \
http://example.com/auth.php
コメントするのに十分な担当者がいないため、ここで回答します。 2つの答えがあり、最も投票された答えはHTTPプロトコルの仕組みを知りません。
POSTデータは、URLではなく、HTTPペイロードの本体で送信されます。 URL内のクエリ文字列は、データを送信するためのアクションではないGETを介してデータを送信するための単なるトリックです(GETおよびPOSTは自明です)。
POSTでcurlを使用する正しい方法は次のとおりです。
curl -X POST -d "gimmeflag=please" http://103.200.7.150:7777/
GET変数とPOST変数が分離されている言語で実装されたスクリプトをテストすると、curl -X POST http://103.200.7.150:7777/?gimmeflag=please
はGET変数が見つかった変数を保存します。