Difference between revisions of "WGET CGI Post"

From Noah.org
Jump to navigationJump to search
Line 8: Line 8:
  
 
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":
Line 31: Line 30:
 
     $filedata = base64_decode($_POST['filedata']);
 
     $filedata = base64_decode($_POST['filedata']);
 
     echo "<h1>$filename</h1>";
 
     echo "<h1>$filename</h1>";
 +
    $fout = fopen($filename,"wb");
 +
    fwrite($fout, $filedata);
 +
    fclose($fout);
 +
?>
 +
</body></html>
 +
</pre>
 +
 +
Step 3. Use wget to post a file to the server (note the backticks):
 +
<pre>
 +
wget --post-file=`./postencode.py FILENAME` http://www.example.com/upload.php
 +
</pre>
 +
 +
<h1>$filename</h1>";
 
     $fout = fopen($filename,"wb");
 
     $fout = fopen($filename,"wb");
 
     fwrite($fout, $filedata);
 
     fwrite($fout, $filedata);

Revision as of 17:09, 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 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":

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

$filename

";

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