Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Post request with Wget?

Tags:

linux

post

wget

I want to use wget to upload a picture to a distant server, using an authentication token, 'AUTH_1624582364932749DFHDD', to the 'test' folder.

This command doesn't work (authorization failed), and I want to make sure that it's not about syntax:

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

Any suggestions?

like image 623
Dady Avatar asked Jul 17 '13 12:07

Dady


People also ask

Can I post with wget?

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. Regarding your authentication token, it should either be provided in the header, in the path of the url, or in the data itself.

How to pass headers in wget?

wget allows you to send an HTTP request with custom HTTP headers. To supply custom HTTP headers, use "--header" option. You can use "--header" option as many time as you want in a single run. If you would like to permanently set the default HTTP request header you want to use with wget, you can use ~/.

How use cookie in wget?

Mirroring such a site requires Wget to send the same cookies your browser sends when communicating with the site. This is achieved by ' --load-cookies '—simply point Wget to the location of the cookies. txt file, and it will send the same cookies your browser would send in the same situation.


1 Answers

Wget currently doesn't not support "multipart/form-data" data. --post-file is not for transmitting files as form attachments, it expects data with the form: key=value&otherkey=example. It is actually possible to post other formats (json) if you send the corresponding header.

--post-data and --post-file work the same way: the only difference is that --post-data allows you to specify the data in the command line, while --post-file allows you to specify the path of the file that contain the data to send.

Here's the documentation:

 --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. 

Regarding your authentication token, it should either be provided in the header, in the path of the url, or in the data itself. This must be indicated somewhere in the documentation of the service you use. In a POST request, as in a GET request, you must specify the data using keys and values. This way the server will be able to receive multiple information with specific names. It's similar with variables.

Hence, you can't just send a magic token to the server, you also need to specify the name of the key. If the key is "token", then it should be token=YOUR_TOKEN.

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

Also, you should consider using curl if you can because it is easier to send files using it. There are many examples on the Internet for that.

like image 54
Maxime Chéramy Avatar answered Sep 19 '22 00:09

Maxime Chéramy