2011-12-30 25 views
10

Khi tôi hiểu rằng (từ quan điểm khách hàng HTTP), chúng tôi có LWP và libcurl (WWW :: Curl) có sẵn trong Perl. Chúng ta có tiêu chí nào để chọn?Tôi có nên sử dụng LWP hoặc lib curl của Perl không?

+2

Có. libcurl là con đường để đi.Phần mềm tuyệt vời bởi một người quan tâm đến chất lượng phần mềm; và hỗ trợ tuyệt vời từ danh sách gửi thư của người dùng/nhà phát triển đang hoạt động. –

+2

Ngoài ra còn có LWP :: Curl :). –

Trả lời

21

Chỉ cần nói chuyện từ một góc độ API, tôi thích LWP. Vấn đề với Curl là nó rất rõ ràng được tạo ra từ một thư viện C. Ví dụ:

$curl->setopt(CURLOPT_URL, 'http://example.com'); 
my $response_body; 
$curl->setopt(CURLOPT_WRITEDATA, \$response_body); 

my $retcode = $curl->perform; 
if ($retcode == 0) { 
    # Response is now in $response_body 
} 
else { 
    die "Error\n"; 
} 

Thông số cài đặt với setopt()? Trả về phản hồi bằng cách sử dụng tham chiếu đến một trong các tham số đó? Có phương pháp trả về 0 khi thành công? Những điều này là thành ngữ trong mã C, nhưng không phải trong OO Perl hiện đại.

Dưới đây là xấp xỉ cùng mã trong LWP:

my $response = $lwp->get('http://example.com'); 
if($response->is_success) { 
    $response_body = $response->decoded_content; 
} 
else { 
    die "Error\n"; 
} 

Các cuộc gọi đến is_success() nhiều tự tài liệu và pha trộn tốt hơn bên trong một ngôn ngữ OO. Các lập trình viên C đã quen với việc xem mã như if($retcode == 0) về thành công vì lý do lịch sử, nhưng không có lý do gì để các lập trình viên của Perl nên chọn thói quen này. Ở trên cũng cho thấy cách LWP dễ dàng quản lý nội dung giải mã cho chúng ta, mà Curl để bạn làm.

Nó không được hiển thị ở trên, nhưng Curl cũng buộc bạn xử lý phân tích cú pháp tham số GET/POST theo cách của riêng bạn. Trong LWP, bạn vượt qua một băm và nó phá vỡ các cặp name=value cho bạn. Cookies cũng vậy. Curl rất thấp theo cách đó.

Curl cũng có thể nhanh hơn, nhưng hãy tự hỏi mình sẽ quan trọng đến mức nào trong đơn đăng ký của bạn. Bạn có thực sự gửi 100 yêu cầu trong một khoảng thời gian ngắn không? Nếu vậy, thì Curl cũng có thể đáng giá. Nếu không, sau đó đi cho dễ thực hiện, mà tôi nghĩ rằng LWP sẽ giành chiến thắng mà không có nhiều của một cuộc chiến.

10

LWP là thường được sử dụng nhất, và làm việc với các mô-đun tiêu chuẩn thực tế như HTTP :: Yêu cầu, HTTP :: Tiêu đề, HTTP :: Cookie, v.v. WWW :: Curl đôi khi mạnh hơn và đôi khi nhanh hơn, nhưng có loại giao diện kỳ ​​lạ làm cho nó rõ ràng rõ ràng rằng nó gói một thư viện C. Tôi sẽ sử dụng LWP trừ khi có một số lý do không.

4

Tất cả phụ thuộc vào yêu cầu và kỳ vọng của bạn. Tôi nghĩ rằng libcurl và LWP có bộ tính năng hơi khác nhau và họ thực hiện hơi khác nhau.

Xem trang này libcurl vs LWP performance tests hoặc this. Tôi sẽ thúc giục bạn để chạy so sánh của riêng bạn cho các tính năng của riêng bạn và môi trường xung quanh để làm cho nó thực sự có liên quan.

(Disclaimer: Tôi là tác giả chính của libcurl)

+1

Cảm ơn bạn đã gửi thư cho libcurl :) –

5

Tôi thích sử dụng Mojo::UserAgent ngay bây giờ. Tôi thậm chí wrote about it for the 2011 Perl Advent Calendar.

Không thực sự là câu trả lời cho câu hỏi chung của bạn. Bạn sử dụng đúng công cụ cho công việc của mình. Không biết bạn đang cố gắng làm gì, hầu như không thể hướng dẫn bạn. Tìm hiểu cả hai, và sau đó chọn một trong đó làm cho công việc của bạn dễ dàng hơn. Người ta có thể có nút bấm tốt hơn và quay số cho những gì bạn cần làm.

1

Tôi thích LWP hơn vì đây là mô-đun perl lõi. Để tương tác với các dịch vụ web, công cụ dòng lệnh curl có một số tính năng tiện lợi như tùy chọn - anyauth và bạn cũng có thể dễ dàng phát hành các yêu cầu HTTP PUT và HTTP DELETE. Tôi nghĩ PUT và DELETE là added as convenience methods to LWP just recently in 2011, sửa tôi nếu tôi sai.

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