~からhttps://curl.haxx.se/docs/httpscripting.html#More_on_changed_methods
次の事項を指摘しなければならない。カールは、要求された操作に応じて使用する方法を選択します。。 -dはPOSTを実行し、-IはHEADなどを実行します。--request/-Xオプションを使用すると、カールによって選択されたメソッドキーワードを変更できますが、カールの動作は変更されません。 たとえば、-d "data"を使用してPOSTを実行すると、-Xを使用してメソッドをPROPFINDに変更でき、カールはまだPOSTを送信すると見なします。次のようにコマンドラインに-X POSTを追加すると、一般的なGETをPOST方式で変更できます。
curl -X POST http://example.org/
...しかし、カールはまだGETを送信しているかのように考えて行動するので、要求本文などを送信しません。
- 「curlが要求したいアクションに応じてどのように使用するかを選択します」の「タスク」とはどういう意味ですか?
「--request/-X オプションを使用する場合」とはどういう意味ですか?
「キーワードカールの選択方法を変更できます」、
「しかし、あなたはカールの行動を修正しません」?
サーバーが要求を処理する方法は重要ではありませんか?これは、要求メッセージに書き込まれた内容と「curlが選択したメソッドキーワード」によって異なりますか?
「カールの行動」とは何ですか?それは何の関係ですか?要求メッセージ(特に要求メッセージのHTTPメソッド)は変更されますか?
これはカールの設計エラーですか?一貫性のないHTTPメソッドを指定できるようにする目的は何ですか?
タスクで暗黙的にHTTPメソッドを指定できる場合は、-Xで明示的にHTTPメソッドを指定する必要があるのはなぜですか?
たとえば、引用文のコマンドはHTML文書を検索しますが、これはGETが実行する操作ですか?
$ curl --trace-ascii dump -X POST http://example.org/
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>411 - Length Required</title>
</head>
<body>
<h1>411 - Length Required</h1>
</body>
</html>
このコマンドで送信された要求は次のとおりです。 HTTPメソッドは、サーバーで表示できるPOSTです。
== Info: Trying 93.184.216.34...
== Info: TCP_NODELAY set
== Info: Connected to example.org (93.184.216.34) port 80 (#0)
=> Send header, 76 bytes (0x4c)
0000: POST / HTTP/1.1
0011: Host: example.org
0024: User-Agent: curl/7.58.0
003d: Accept: */*
004a:
<= Recv header, 30 bytes (0x1e)
0000: HTTP/1.1 411 Length Required
<= Recv header, 25 bytes (0x19)
0000: Content-Type: text/html
<= Recv header, 21 bytes (0x15)
0000: Content-Length: 357
<= Recv header, 19 bytes (0x13)
0000: Connection: close
<= Recv header, 37 bytes (0x25)
0000: Date: Mon, 10 Feb 2020 12:23:42 GMT
<= Recv header, 25 bytes (0x19)
0000: Server: ECSF (nyb/1D33)
<= Recv header, 2 bytes (0x2)
0000:
<= Recv data, 357 bytes (0x165)
0000: <?xml version="1.0" encoding="iso-8859-1"?>.<!DOCTYPE html PUBLI
0040: C "-//W3C//DTD XHTML 1.0 Transitional//EN". "http://www.
0080: w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">.<html xmlns="http
00c0: ://www.w3.org/1999/xhtml" xml:lang="en" lang="en">..<head>...<ti
0100: tle>411 - Length Required</title>..</head>..<body>...<h1>411 - L
0140: ength Required</h1>..</body>.</html>.
== Info: Closing connection 0
ありがとうございます。
答え1
「curlが要求したいアクションに応じてどのように使用するかを選択します」の「タスク」とはどういう意味ですか?
バラよりHTTPプロトコル部分、用語を「定義」します。
HTTPは、クライアントが特定の操作を要求するためにサーバーに送信する一般的なASCIIテキスト行であり、サーバーは実際に要求されたコンテンツをクライアントに送信する前に数行のテキストで応答します。
タスクは、データの取得(メソッドに対応GET
)、リソースの追加(PUT
メソッド)、既存のリソースへのデータ転送(POST
メソッド)など、HTTPサーバーから要求されたすべてです。
サーバーが要求を処理する方法は重要ではありませんか?これは、要求メッセージに書き込まれた内容と「curlが選択したメソッドキーワード」によって異なりますか?
はい、しかし送信されたメッセージ全体は、選択した方法で設定された期待値を満たす必要があります。あなたの例はこれを示しています。メソッドcurl
に対してGET
有効なメッセージが生成されましPOST
たが、メソッドを指定するためにメッセージを置き換え、生成されたメッセージがメソッドに対して無効であるため、POST
サーバーはエラーとして応答します。
この-X
オプションは、周囲の動作を変更せずにメソッドをオーバーライドします。
答え2
「curlが要求したいアクションに応じてどのように使用するかを選択します」の「タスク」とはどういう意味ですか?
カール機能を変更するさまざまなオプションを意味するようです。マニュアルページでは、明示的に「タスク」と呼んでいないように見えますが、「FOOメソッドを使用したXリクエスト」と言うと適用されているようです。-I
/は--head
ヘッダーだけが必要なので、using HEAD
、usingを使用します。引用符付きのテキストは、太字の部分の後に、およびを明示的に示します。--data
POST
--data --get
GET
-I
-d
最後のペアが重要です。GET
データはURLとともに送信されます。つまり、HTTPリクエストのコンテンツに送信されます...?data_here
。POST
curl --data foo=bar http://host/path/to/foo.pl
私達が得るように
POST /path/to/foo.pl HTTP/1.1
Content-Length: 7
Content-Type: application/x-www-form-urlencoded
foo=bar
そしてcurl --data foo=bar --get http://host/path/to/foo.pl
GET /path/to/foo.pl?foo=bar HTTP/1.1
「--request/-X オプションを使用する場合」とはどういう意味ですか?カールで選択したメソッドキーワードを変更できますが、カールの動作は変更されません。
を使用しても、-X GET
データが移動する場所(またはエンコード方法)は変更されません。を使用すると、--data foo=bar -X GET
まだcurl
実行中であると考えて、POST
リクエストの本文にデータを公開し、単にメソッドの名前を変更します(下記)。おそらくここではうまくいきません。ただし、要求の本文にデータが必要なメソッド-X XYZ
である場合(たとえば。XYZ
POST
GET /path/to/foo.pl HTTP/1.1
Content-Length: 7
Content-Type: application/x-www-form-urlencoded
foo=bar