Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Re: POST file through REST::Client

by Anonymous Monk
on Apr 10, 2018 at 18:39 UTC ( #1212647=note: print w/replies, xml ) Need Help??


in reply to POST file through REST::Client [SOLVED]

Hi

"Authorization" => 'Basic ' .encode_base64($options{username} . ':' . $options{password}) };

You should be using the credentials method. Why aren't you using the credentials method?

Update2: After a lot of experimentation and research on the web I found that I a missing the body, I have added the body but now something else is missing. I get the following error: Multipart form parse error - Invalid boundary in m +ultipart: None"

Where does the error come from?

I dont understand what you're trying to do with that code snippet. You dont seem to be doing the same thing as Re: PUT a Multipart request in PERL ( lwp-mechanize-put-multipart-form.pl ). Have you printed out the resulting request to see what it looks like?

Replies are listed 'Best First'.
Re^2: POST file through REST::Client
by thanos1983 (Vicar) on Apr 11, 2018 at 08:35 UTC

    Hello Anonymous Monk,

    You should be using the credentials method. Why aren't you using the credentials method?

    To be honest I thought this is better passing the credentials to the header as I see the same thing happening with a CURL request. It is not the credentials that are producing the problem because on other POST / PUT / DELETE requests that I have already format are working just fine. The problem appears when I am trying to send the file.

    Where does the error come from?

    This error comes from the client side, complaining that it can not find the file to post it.

    I dont understand what you're trying to do with that code snippet.

    I am trying to post a file to server for further processing. The proposed solution that you send I will take a look, and try to apply it on my case.

    Have you printed out the resulting request to see what it looks like?

    Yes I am printing the return of the request and this is the error output:

    $VAR1 = '{"detail":"Multipart form parse error - Invalid boundary in m +ultipart: None"}';

    I will give it a try on your proposed solution and I will update my question. Thank you for your time and effort. BR / Thanos

    Seeking for Perl wisdom...on the process of learning...not there...yet!

      Hi,

      I realize you've marked this solved, but stratigery important :)

      Yes I am printing the return of the request and this is the error output:

      That is not a request. That is information you've already provided. Its like you pay for a drink, bartender says not enough, you still owe me 3 dollars, and you respond with, yes, I already gave you a napkin.

      I dont understand what you're trying to do with that code snippet...I am trying to post a file to server for further processing.

      I honestly thought you were trying to bake cookies, which is why I asked how much water you've added, because I wanted to make sure you were serious when you said I am trying to bake cookies and I added this much water, because that makes total cents. Total cents!

      You should be using the credentials method...To be honest I thought this is better ... CURL...working just fine .. except upload ... I tried to use it but it did not worked :)

      Credentials is convenient, shorter and easier to remember and use, than hand-enconding basic auth.

      As a bonus, credentials doesn't send username/password unless the remote/target/destination server asks for authentication, and the domain/realm matches.

      If credentials "isnt working", your domain/real doesn't match, or your server is broken by not asking for authentication.

      Brute force is a terrible way to learn, sourcediving to copy/paste instead of taking 10min to understand 20 lines of code and the corresponding docs.

      Anyway , if reject convenience, go big and reject the entire enchilada

      #!/usr/bin/perl -- use strict; use warnings; use LWP; my $ua = LWP::UserAgent->new; ## watch "actual" http transactions on stdout $ua->add_handler("request_send", sub { shift->dump; return }); $ua->add_handler("response_done", sub { shift->dump; return }); $ua->show_progress(1); ## on stderr my $urljig = 'http://jigsaw.w3.org/HTTP/Basic/'; $ua->credentials( URI->new( $urljig )->host_port, 'test', 'guest', 'gu +est' ); $ua->get( $urljig ); ## first login (get challenged, authenticate) $ua->post( # then upload "big" file $urljig, { # %form file => [ # form input field name undef, # or '/real/path/to/file/to/upload.txt' "filename to be send that is different from real/path/to/f +ile/to/upload", -content_type => 'text/json', -content => "file contents cause undef doesnt read file", ], }, content_type => 'multipart/form-data', # for the %form ); __END__

      When run this produces fruits

      GET http://jigsaw.w3.org/HTTP/Basic/
      User-Agent: libwww-perl/6.15
      
      (no content)
      HTTP/1.1 401 Unauthorized
      Connection: close
      Date: Thu, 12 Apr 2018 21:49:56 GMT
      Server: Jigsaw/2.3.0-beta4
      WWW-Authenticate: Basic realm="test"
      Content-Length: 261
      Content-Type: text/html;charset=ISO-8859-1
      Client-Date: Thu, 12 Apr 2018 21:53:28 GMT
      Client-Peer: 128.30.52.21:80
      Client-Response-Num: 1
      Title: Unauthorized
      ...
      
      GET http://jigsaw.w3.org/HTTP/Basic/
      Authorization: Basic Z3Vlc3Q6Z3Vlc3Q=
      User-Agent: libwww-perl/6.15
      
      (no content)
      HTTP/1.1 200 OK
      Connection: close
      Date: Thu, 12 Apr 2018 21:49:56 GMT
      ETag: "1lkdfte:qoguo8q8"
      Server: Jigsaw/2.3.0-beta2
      Content-Length: 458
      Content-Location: http://jigsaw.w3.org/HTTP/Basic/ok.html
      Content-Type: text/html
      Last-Modified: Sun, 25 Jun 2000 17:08:58 GMT
      Client-Date: Thu, 12 Apr 2018 21:53:28 GMT
      Client-Peer: 128.30.52.21:80
      Client-Response-Num: 1
      Title: Basic Authentication test page
      ...
      
      POST http://jigsaw.w3.org/HTTP/Basic/
      Authorization: Basic Z3Vlc3Q6Z3Vlc3Q=
      User-Agent: libwww-perl/6.15
      Content-Length: 232
      Content-Type: multipart/form-data; boundary=xYzZY
      
      --xYzZY\r
      Content-Disposition: form-data; name="file"; filename="filename to be send that is different from real/path/to/file/to/upload"\r
      -Content: file contents cause under doesnt read file\r
      -Content-Type: text/json\r
      \r
      \r
      --xYzZY--\r\n
      HTTP/1.1 405 Method Not Allowed
      Connection: close
      Date: Thu, 12 Apr 2018 21:49:57 GMT
      Server: Jigsaw/2.3.0-beta4
      Allow: HEAD,GET,OPTIONS,TRACE
      Content-Length: 41
      Content-Type: text/html
      Client-Date: Thu, 12 Apr 2018 21:53:28 GMT
      Client-Peer: 128.30.52.21:80
      Client-Response-Num: 1
      
      Method POST not allowed on this resource.
      

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1212647]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (6)
As of 2018-10-18 09:28 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    When I need money for a bigger acquisition, I usually ...














    Results (100 votes). Check out past polls.

    Notices?