Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

LWP and POST (Oh no, not again)

by smr42 (Initiate)
on Dec 13, 2001 at 14:58 UTC ( [id://131584]=perlquestion: print w/replies, xml ) Need Help??

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

Hello

I'm trying to upload a picture to a server with the following code:

#!/usr/bin/perl use HTTP::Request; use LWP::UserAgent; use MIME::Base64 qw(encode_base64); open(BILD,"picture.gif"); while(read(BILD,$buf,60*57)) { $userfile .= encode_base64($buf,""); } close(BILD); $browser = new LWP::UserAgent; my $req = new HTTP::Request POST,'http://192.168.1.241/GMS/bildarchiv/ +manage_addGMSImage',[file => $userfile]; $req->authorization_basic('user','passwd'); $ergebnis = $browser->request($req)->as_string; print "Bild abgeschickt\n".$ergebnis;

But the sript stops with the following error message:

Can't call method "clone" on unblessed reference at /usr/lib/perl5/sit +e_perl/5.6.0/HTTP/Message.pm line 53.

What does that mean?

The error message disappears when I remove the
,[file => $userfile]
but then my server script complains about the missing "file".

I have looked at "man LWP", "man lwpcook" and the "Perl Cookbook", but I can't find an example that fits.

What is my mistake?

Thanks in advance

Sven Rudolph

Replies are listed 'Best First'.
Re: LWP and POST (Oh no, not again)
by arhuman (Vicar) on Dec 13, 2001 at 15:09 UTC
    See HTTP::Request::Common (and the RFC 1867)
    Especially the part about setting the content-part to 'multipart/form-data'...

    It should helps...
    ;-)


    "Only Bad Coders Code Badly In Perl" (OBC2BIP)
Re: LWP and POST (Oh no, not again)
by gildir (Pilgrim) on Dec 13, 2001 at 19:32 UTC
    Try it this way:

    use LWP; my $ua = LWP::UserAgent->new; my $req = HTTP::Request->new( POST => $url); $req->content_type('image/jpeg'); open(FILE,$filename); $req->content(join('',<FILE>)); close(FILE); my $res = $ua->request($req); die("Bzzzzzzz, error!") unless $res->is_success;
    You must set proper content type. And I just can't figure out why are you trying to base64 encode the file. Without the headers is base64 encoding pointless.

    If server does not support direct upload of picture this way, you should probably encode it as a part of HTML form. Use content type of 'multipart/form-data' and you should probably use some (MIME?) modules to build up a content with proper headers.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://131584]
Approved by root
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others avoiding work at the Monastery: (3)
As of 2024-04-19 23:32 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found