-X を使用すると、カールによって選択されたメソッドキーワードを変更できますが、カールの動作は変更されません。これはどういう意味ですか?

-X を使用すると、カールによって選択されたメソッドキーワードを変更できますが、カールの動作は変更されません。これはどういう意味ですか?

~から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を送信しているかのように考えて行動するので、要求本文などを送信しません。

  1. 「curlが要求したいアクションに応じてどのように使用するかを選択します」の「タスク」とはどういう意味ですか?
  2. 「--request/-X オプションを使用する場合」とはどういう意味ですか?

    • 「キーワードカールの選択方法を変更できます」、

    • 「しかし、あなたはカールの行動を修正しません」?

    サーバーが要求を処理する方法は重要ではありませんか?これは、要求メッセージに書き込まれた内容と「curlが選択したメソッドキーワード」によって異なりますか?

    「カールの行動」とは何ですか?それは何の関係ですか?要求メッセージ(特に要求メッセージのHTTPメソッド)は変更されますか?

  3. これはカールの設計エラーですか?一貫性のない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を使用します。引用符付きのテキストは、太字の部分の後に、およびを明示的に示します。--dataPOST--data --getGET-I-d

最後のペアが重要です。GETデータはURLとともに送信されます。つまり、HTTPリクエストのコンテンツに送信されます...?data_herePOST

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である場合(たとえば。XYZPOST

GET /path/to/foo.pl HTTP/1.1
Content-Length: 7
Content-Type: application/x-www-form-urlencoded

foo=bar  

関連情報