cdlvj has asked for the wisdom of the Perl Monks concerning the following question:

have a https site to upload files, and I want to automate the process.
Client code: my $url = "https:\/\/acct:pass\@ftp.mydomain.com/cgi-bin/upload.pl"; my $ua = LWP::UserAgent->new; $ua->agent("MyApp/0.1 "); my $file="c:\\filetoupload.txt"; $res = $ua->post($url, [ "ac" => 'upload', "file" => "$file" ] ); print $res->content, "\n";
Server Code to receive file:
## open of the file on server open(FILE,">$upload_dir/$file_name") || &Error("Error opening file $fi +le_name for writing, error $!", 1); binmode FILE; $time=time(); while (1) { ### fails here return code is undef. $bytes_count = read($file_query,$buff,2096); if ($bytes_count == 0) { last; }
Manual client uses the input type=File which allows the user to browse and pick the file. Question is what is the trick to pass the file to the server. The server fails on the read. $file_query is the name of the file, would think that it would be a handle. Thanks in advance.

Replies are listed 'Best First'.
Re: Using LWP to automate file upload
by Fletch (Bishop) on May 04, 2007 at 16:38 UTC

    The documentation for POST in HTTP::Request::Common shows an example of how to do a file upload. You need to have an array ref with specific contents.

    You might also look at WWW::Mechanize which has an even simpler interface (use the value method to set the file upload field to the filename you want to upload and then submit the form).

      Kudos. That is it. Thank you.
      my $ua = LWP::UserAgent->new; $ua->agent("MyApp/0.1 "); $res = $ua->post($url, Content_Type => 'form-data', Content => [ "ac" => 'upload', "file" => [ "$FILE" ], ] ); print $res->content, "\n";