Difference between revisions of "WGET CGI Post"

From Noah.org
Jump to navigationJump to search
 
(6 intermediate revisions by the same user not shown)
Line 5: Line 5:
  
 
I like to use wget in shell scripts to upload files to remote servers over http.  
 
I like to use wget in shell scripts to upload files to remote servers over http.  
I use this when it isn't convenient to use scp.  
+
I use this when it isn't convenient to use scp.
 +
 
 +
This is not secure if you don't pay attention.
  
 
This requires a tiny Python script on the client side and a little PHP on the server side.
 
This requires a tiny Python script on the client side and a little PHP on the server side.
The Python script is used to urlencode the file to be uploaded.
+
The Python script is used to encode the file to be uploaded so that wget can send it as a POST request.
It's a very simple script, so you can easily replace it with the  
+
It's a very simple script, so you can easily replace it with the language of your choice (Perl or maybe even sh).  
language of your choice (Perl or maybe even sh).  
 
  
 
Step 1. On the client side create a Python script called "postencode.py":
 
Step 1. On the client side create a Python script called "postencode.py":
 
<pre>
 
<pre>
#!/bin/env python
+
#!/usr/bin/env python
 
import sys, urllib, base64
 
import sys, urllib, base64
 
input_filename = sys.argv[1]
 
input_filename = sys.argv[1]
Line 25: Line 26:
  
 
Step 2. On the server side create a PHP create a script called "upload.php":
 
Step 2. On the server side create a PHP create a script called "upload.php":
<pre>
+
 
 +
<pre><nowiki>
 
<html><head><title>Post Upload Tool</title><body>
 
<html><head><title>Post Upload Tool</title><body>
 
<?php
 
<?php
Line 36: Line 38:
 
?>
 
?>
 
</body></html>
 
</body></html>
</pre>
+
</nowiki></pre>
  
 
Step 3. Use wget to post a file to the server (note the backticks):
 
Step 3. Use wget to post a file to the server (note the backticks):

Latest revision as of 17:36, 6 June 2007

Post upload using wget

I like to use wget in shell scripts to upload files to remote servers over http. I use this when it isn't convenient to use scp.

This is not secure if you don't pay attention.

This requires a tiny Python script on the client side and a little PHP on the server side. The Python script is used to encode the file to be uploaded so that wget can send it as a POST request. It's a very simple script, so you can easily replace it with the language of your choice (Perl or maybe even sh).

Step 1. On the client side create a Python script called "postencode.py":

#!/usr/bin/env python
import sys, urllib, base64
input_filename = sys.argv[1]
postwad_filename = input_filename + ".post"
datawad = base64.encodestring(file(input_filename, "rb").read())
postwad = urllib.urlencode({"filedata":datawad, "filename":input_filename})
file(postwad_filename, "wb").write(postwad)
print postwad_filename

Step 2. On the server side create a PHP create a script called "upload.php":

<html><head><title>Post Upload Tool</title><body>
<?php
    $filename = $_POST['filename'];
    $filedata = base64_decode($_POST['filedata']);
    echo "<h1>$filename</h1>";
    $fout = fopen($filename,"wb");
    fwrite($fout, $filedata);
    fclose($fout);
?>
</body></html>

Step 3. Use wget to post a file to the server (note the backticks):

wget --post-file=`./postencode.py FILENAME` http://www.example.com/upload.php

Other languages for the client side

If you choose not to use Python for the postencode script then here are references for other languages.

In Perl use:

   use URI::Escape;
   uri_escape(...);

In PHP use:

   urlencode(...);