-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オプションは、周囲の動作を変更せずにメソッドをオーバーライドします。

おすすめ記事