Wolfgang
Wolfgang

Reputation: 254

LWP Send Post request and get headers only in response

I have code like this

my $ua = new LWP::UserAgent;
$ua->timeout($timeout);
$ua->agent($useragent);
$response = $ua->post($domain,['login_name'=>$login,'login_password'=> $password])->as_string;

Content of page so large, thatI can't receive it. How to get only headers with sending post data?

Upvotes: 0

Views: 1320

Answers (2)

Galimov Albert
Galimov Albert

Reputation: 7357

To first, check if you can pass this login_name and login_password via HEAD (in url string: domain/?login_name=...&login_password=...). If this will not work, you are in bad case.

You cannot use POST with behavior of HEAD. LWP will wait full response.

Using POST the server will send you the content anyway, but you can avoid receiving all content using sockets tcp by yourself: gethostbyname, connect, sysread until you get /\r?\n\r?\n/ and close socket after this. Some traffic will be utilized anyway, but you can save memory and receive time.

Its not normal thing to do this with sockets, but sometimes when you have highload/big data - there is no better way than such mess.

Upvotes: 1

ddoxey
ddoxey

Reputation: 2063

I think this should do it for you.

my $ua = LWP::UserAgent->new();
$ua->timeout($timeout);
$ua->agent($useragent);
my $response = $ua->post( 
    $domain,
    [ 'login_name' => $login, 'login_password' => $password ] 
);

use Data::Dumper;

print Dumper( $response->headers() );
print $response->request()->content(), "\n";

Upvotes: 1

Related Questions