1. ホーム
  2. linux

[解決済み] Wgetでリクエスト投稿?

2022-03-07 11:31:56

質問

wgetを使って、認証トークン「AUTH_1624582364932749DFHDD」を使って、遠くのサーバーにある「test」フォルダに画像をアップロードしたいのですが、どうすればよいですか?

このコマンドはうまくいきません(認証に失敗)。構文についてではないことを確認したいのですが。

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

何かご意見はありますか?

解決方法は?

Wgetは現在、"multipart/form-data"データをサポートしていません。 --post-file は、フォームの添付ファイルとしてファイルを送信するためのものではなく、フォームと一緒にデータが送信されることを想定しています。 key=value&otherkey=example . 実際には、対応するヘッダを送信すれば、他のフォーマット(json)を投稿することも可能です。

--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のパス、またはデータ自体のいずれかで提供される必要があります。このことは、利用するサービスのドキュメントのどこかに記載されているはずです。POSTリクエストでは、GETリクエストと同様に、キーと値を使ってデータを指定する必要があります。こうすることで、サーバーは特定の名前を持つ複数の情報を受け取ることができるようになります。変数と似ていますね。

したがって、単にマジックトークンをサーバーに送るだけではダメで、キーの名前も指定する必要がある。もしキーが "token"であれば、次のようになります。 token=YOUR_TOKEN .

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

また、curlを使うと簡単にファイルを送ることができるので、できればcurlを使うことを検討したほうがよいでしょう。そのための例はインターネット上にたくさんあります。