Difference between revisions of "WGET CGI Post"

From Noah.org
Jump to navigationJump to search
m
Line 1: Line 1:
[[Category:engineering]]
+
[[Category:Engineering]]
 +
[[Category:Python]]
 
== Post upload using wget ==
 
== Post upload using wget ==
  
Line 13: Line 14:
 
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
+
#!/bin/env python
    import sys, urllib, base64
+
import sys, urllib, base64
    input_filename = sys.argv[1]
+
input_filename = sys.argv[1]
    postwad_filename = input_filename + ".post"
+
postwad_filename = input_filename + ".post"
    datawad = base64.encodestring(file(input_filename, "rb").read())
+
datawad = base64.encodestring(file(input_filename, "rb").read())
    postwad = urllib.urlencode({"filedata":datawad, "filename":input_filename})
+
postwad = urllib.urlencode({"filedata":datawad, "filename":input_filename})
    file(postwad_filename, "wb").write(postwad)
+
file(postwad_filename, "wb").write(postwad)
    print postwad_filename
+
print postwad_filename
 
</pre>
 
</pre>
  
 
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>
    <html><head><title>Post Upload Tool</title><body>
+
<html><head><title>Post Upload Tool</title><body>
    <?php
+
<?php
        $filename = $_POST['filename'];
+
    $filename = $_POST['filename'];
        $filedata = base64_decode($_POST['filedata']);
+
    $filedata = base64_decode($_POST['filedata']);
        echo "<h1>$filename</h1>";
+
    echo "<h1>$filename</h1>";
        $fout = fopen($filename,"wb");
+
    $fout = fopen($filename,"wb");
        fwrite($fout, $filedata);
+
    fwrite($fout, $filedata);
        fclose($fout);
+
    fclose($fout);
    ?>
+
?>
    </body></html>
+
</body></html>
 
</pre>
 
</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):
 
<pre>
 
<pre>
    wget --post-file=`./postencode.py FILENAME` http://www.example.com/upload.php
+
wget --post-file=`./postencode.py FILENAME` http://www.example.com/upload.php
 
</pre>
 
</pre>
  

Revision as of 17:03, 6 June 2007

Post upload using wget

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

This requires a little python script on the client side. The script is to urlencode the file to be uploaded. It's a very simple script, so you can easily replace it with the language of your choice.

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

#!/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

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(...);