2010-11-16 32 views
23

https://orbit.theplanet.com/Login.aspx?url=/Default.aspx adresinden oturum açmaya çalışırsanız (herhangi bir kullanıcı adı/parola birleşimi kullanın), oturum açma kimlik bilgilerinin geleneksel olmayan bir POST verisi kümesi olarak gönderildiğini görebilirsiniz: sadece bir JSON dizgisi ve normal anahtar = değer çifti değil. yerineLWP ile nasıl bir JSON POST isteği yapabilirim?

Özellikle,:

username=foo&password=bar 

hatta gibi bir şey:

json={"username":"foo","password":"bar"} 

basitçe var:

{"username":"foo","password":"bar"} 

mümkün mü LWP veya böyle bir talebi gerçekleştirmek için alternatif modül IO::Socket ile yapmaya hazırım, ancak varsa daha yüksek bir seviyeyi tercih ederim.

cevap

56

HTTP isteğini el ile oluşturmanız ve bunu LWP'ye iletmeniz gerekir. aşağıdaki gibi bir şey yapmak gerekir:

my $lwp = LWP::UserAgent->new; 
$lwp->request($req); 
13

Sadece bununla birlikte bir POST isteği oluşturun ve LWP'ye verin.

my $req = HTTP::Request->new(POST => $url); 
$req->content_type('application/json'); 
$req->content($json); 

my $ua = LWP::UserAgent->new; # You might want some options here 
my $res = $ua->request($req); 
# $res is an HTTP::Response, see the usual LWP docs. 
+2

baskı $ res-> decoded_content kodu çözülmüş tepkisini yazdırmalısınız – kyle

1

gerçekten WWW :: Eğer başlığını ayarlayabilirsiniz mekanize kullanmak istiyorsanız 'content-type:

my $uri = 'https://orbit.theplanet.com/Login.aspx?url=/Default.aspx'; 
my $json = '{"username":"foo","password":"bar"}'; 
my $req = HTTP::Request->new('POST', $uri); 
$req->header('Content-Type' => 'application/json'); 
$req->content($json); 

Sonra LWP ile isteği yürütebilirsiniz 'sonrası

$mech->add_header( 
'content-type' => 'application/json' 
); 

$mech->post($uri, Content => $json); 
6

önce sayfa sadece JSON biçiminde olur girişi (isim vermeden) bir 'anonim' kullanıyor.

$ua->post($url, ..., Content => $content)'u kullanabilmeniz için HTTP::Request::Common'dan POST() işlevini kullanabilmeniz gerekir.

use LWP::UserAgent; 

my $url = 'https://orbit.theplanet.com/Login.aspx?url=/Default.aspx'; 
my $json = '{"username": "foo", "password": "bar"}'; 

my $ua = new LWP::UserAgent(); 
$response = $ua->post($url, Content => $json); 

if ($response->is_success()) { 
    print("SUCCESSFUL LOGIN!\n"); 
} 
else { 
    print("ERROR: " . $response->status_line()); 
} 

Ya da, JSON girişi için bir karma kullanabilirsiniz:

use JSON::XS qw(encode_json); 

... 

my %json; 
$json{username} = "foo"; 
$json{password} = "bar"; 

... 

$response = $ua->post($url, Content => encode_json(\%json)); 
İlgili konular