web-dev-qa-db-ja.com

Wgetでリクエストを送信しますか?

Wgetを使用して、認証トークン「AUTH_1624582364932749DFHDD」を使用して「test」フォルダーに遠方のサーバーに画像をアップロードします。

このコマンドは機能せず(認証に失敗しました)、構文に関するものではないことを確認したいと思います。

wget --post-file=nature.jpg http://ipadress:8080/v1/AUTH_test/test/ --post-data="AUTH_1624582364932749DFHDD"

助言がありますか?

54
Dady

Wgetは現在、x-www-form-urlencodedデータのみをサポートしています。 --post-fileは、フォームの添付ファイルとしてファイルを送信するためではなく、key=value&otherkey=exampleという形式のデータが必要です。

--post-data--post-fileは同じように機能します。唯一の違いは、--post-dataを使用するとコマンドラインでデータを指定でき、--post-fileを使用するとパスを指定できることです。送信するデータを含むファイル。

ドキュメントは次のとおりです。

 --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; the only difference is that one expects its content as a
           command-line parameter and the other accepts its content from a file. In
           particular, --post-file is not for transmitting files as form
           attachments: those must appear as "key=value" data (with appropriate
           percent-coding) just like everything else. Wget does not currently
           support "multipart/form-data" for transmitting POST data; only
           "application/x-www-form-urlencoded". Only one of --post-data and
           --post-file should be specified.

認証トークンに関しては、ヘッダー、URLのパス、またはデータ自体のいずれかで提供する必要があります。これは、使用するサービスのドキュメントのどこかに記載する必要があります。 GET要求のように、POST要求では、キーと値を使用してデータを指定する必要があります。これにより、サーバーは特定の名前の複数の情報を受信できます。変数についても同様です。

したがって、マジックトークンをサーバーに送信するだけでなく、キーの名前も指定する必要があります。キーが「トークン」の場合、token=YOUR_TOKENである必要があります。

wget --post-data 'user=foo&password=bar' http://example.com/auth.php

また、curlを使用してファイルを送信する方が簡単なため、可能であればcurlの使用を検討する必要があります。そのためのインターネット上の多くの例があります。

74
Maxime Chéramy