2010-10-01 43 views
15

Tôi muốn tạo một chương trình giao tiếp với http://www.md5crack.com/crackmd5.php. Mục tiêu của tôi là gửi trang web một băm (md5) và hy vọng trang web sẽ có thể crack nó. Sau đó, tôi muốn hiển thị bản rõ của băm. Vấn đề của tôi là gửi dữ liệu đến trang web. Tôi đã tra cứu các bài viết về việc sử dụng LWP tuy nhiên tôi vẫn bị mất. Ngay bây giờ, băm không gửi, một số dữ liệu rác khác là. Tôi sẽ gửi một chuỗi dữ liệu cụ thể đến trang web như thế nào?Làm cách nào để gửi dữ liệu POST bằng LWP?

use HTTP::Request::Common qw(POST); 
use LWP::UserAgent; 


$ua = LWP::UserAgent->new(); 
my $req = POST 'http://www.md5crack.com/crackmd5.php', [ 
maxlength=> '2048', 
name=> 'term', 
size=>'55', 
title=>'md5 hash to crack', 
value=> '098f6bcd4621d373cade4e832627b4f6', 
name=>'crackbtn', 
type=>'submit', 
value=>'Crack that hash baby!', 

]; 
$content = $ua->request($req)->as_string; 

print "Content-type: text/html\n\n"; 
print $content; 

Trả lời

27

Bạn đang gửi sai dữ liệu vì bạn đang dùng HTML để chỉ định tiện ích con và liên kết dữ liệu với dữ liệu mà nó thực sự gửi. Số liệu điều chỉnh sẽ được chỉ cần gửi tên widget và giá trị của nó:

term: 098f6bcd4621d373cade4e832627b4f6 

Thay vào đó, các dữ liệu mà là nhận được hiện đăng là:

maxlength: 2048 
name:  term 
size:  55 
title:  md5 hash to crack 
value:  098f6bcd4621d373cade4e832627b4f6 
name:  crackbtn 
type:  submit 
value:  Crack that hash baby! 

Corrected chương trình:

use strict; 
use warnings; 

use LWP::UserAgent; 
use HTTP::Request::Common qw{ POST }; 
use CGI; 

my $md5 = '098f6bcd4621d373cade4e832627b4f6'; 
my $url = 'http://www.md5crack.com/crackmd5.php'; 

my $ua  = LWP::UserAgent->new(); 
my $request = POST($url, [ 'term' => $md5 ]); 
my $content = $ua->request($request)->as_string(); 

my $cgi = CGI->new(); 
print $cgi->header(), $content; 

Bạn cũng có thể sử dụng phương thức post() của LWP::UserAgent():

use strict; 
use warnings; 

use LWP::UserAgent; 
use CGI; 

my $md5 = '098f6bcd4621d373cade4e832627b4f6'; 
my $url = 'http://www.md5crack.com/crackmd5.php'; 

my $ua  = LWP::UserAgent->new(); 
my $response = $ua->post($url, { 'term' => $md5 }); 
my $content = $response->decoded_content(); 

my $cgi = CGI->new(); 
print $cgi->header(), $content; 

Luôn nhớ đến use strictuse warnings. Nó được coi là thực hành tốt và sẽ tiết kiệm thời gian của bạn.

6

Nó từng là bánh quy giòn sẽ tìm ra loại công cụ này bằng cách đọc. Có các ví dụ trong HTTP :: Request :: Common, mà LWP :: UserAgent yêu cầu bạn kiểm tra việc gửi dữ liệu POST. Bạn chỉ cần gửi dữ liệu biểu mẫu chứ không phải dữ liệu meta đi kèm với nó.

Bạn có thể có thời gian dễ dàng hơn bằng cách sử dụng WWW::Mechanize vì nó có giao diện tập trung vào con người hơn nhiều.

Các vấn đề liên quan