Thư viện `libcurl`
(everything.curl.dev)Sử dụng --libcurl
- Khuyến nghị dùng libcurl: Người dùng được khuyến nghị trước tiên hãy dùng công cụ dòng lệnh curl để thử kiểu truyền tải mong muốn, và khi nó đã hoạt động gần đúng như ý thì chạy lại với tùy chọn
--libcurl [tên_tệp]được thêm vào dòng lệnh. - Tạo mã: Tùy chọn dòng lệnh
--libcurlsẽ tạo ra một chương trình C với tên tệp được cung cấp. Chương trình C này sử dụng libcurl để thực hiện việc truyền tải mà công cụ dòng lệnh curl đã thực hiện. - Ngoại lệ và khác biệt: Kết quả không phải lúc nào cũng khớp 100%, nhưng nó có thể mang lại nguồn cảm hứng rất tốt về các tùy chọn libcurl và các đối số bổ sung mà bạn muốn sử dụng.
Mã ví dụ
- Ví dụ chạy: Khi chạy lệnh
curl http://example.com --libcurl example.c, tệpexample.csẽ được tạo trong thư mục hiện tại. - Mã được tạo: Mã được sinh ra bao gồm nhiều thiết lập tùy chọn bằng
curl_easy_setopt(), và một số tùy chọn không thể dễ dàng được tạo trực tiếp từ mã nguồn nên người dùng có thể phải tự triển khai hoặc không sử dụng.
Ý kiến của GN⁺
- Tính hữu ích của libcurl: Tính năng này giúp các nhà phát triển dễ dàng chuyển một lệnh curl đang hoạt động trên dòng lệnh thành chương trình C, qua đó tăng tốc việc phát triển ứng dụng sử dụng libcurl.
- Ưu điểm của việc tạo mã: Mã được tạo tự động có thể giúp nhà phát triển hiểu và áp dụng API của libcurl nhanh hơn.
- Giá trị như một công cụ học tập: Đây có thể là tài liệu học tập tốt cho các kỹ sư phần mềm mới vào nghề để thấy các tùy chọn libcurl và những ví dụ áp dụng thực tế của lập trình mạng.
1 bình luận
Ý kiến trên Hacker News
Mẫu tìm đúng request mong muốn trong tab Network của công cụ dành cho nhà phát triển trên trình duyệt, sao chép bằng “copy as curl”, rồi chuyển đổi sang mã request của ngôn ngữ đang dùng bằng công cụ như https://curlconverter.com/ là cực kỳ hay
Ở một khía cạnh nào đó, curl được dùng như một biểu diễn trung gian có thể dịch sang bất cứ đâu
curl_translatecủa gói httr2, bản viết lại gần đây của httr, để chuyển lệnh “copy as curl” thành mã requesthttps://httr2.r-lib.org/reference/curl_translate.html
“copy as curl” của trình duyệt lấy ra trạng thái mà các header xác thực và mã hóa chắc chắn đang hoạt động, nên tiện hơn nhiều so với việc tự mò chỉnh một lệnh curl nhiều dòng
Có thể đổi tham số request để bắn sang instance cục bộ, hoặc pipe qua
jqđể tinh chỉnh định dạng đầu raVì được dùng quá rộng rãi nên có công cụ xuất request sang cURL, và cũng có công cụ nhập từ cURL
Việc giao diện dòng lệnh có một cờ để xuất ra mã nguồn chương trình thực hiện cùng công việc với lệnh hiện tại là khá ngầu
Nó tạo cảm giác như mở nắp capo để thấy bên trong đang diễn ra chuyện gì, không chỉ giúp hiểu rõ hơn cách nó hoạt động mà còn dễ chỉnh sửa hoặc mở rộng theo nhu cầu
Nếu đang dùng
libcurlrồi cần thứ như range request, hoặc đã làm “copy as curl” từ tab Network của trình duyệt, thì chỉ cần chạy nó trên dòng lệnh rồi thêm--libcurllà có thể biết chính xác phải làm thế nào với thư viện CCách làm này từng là một trong những lý do macro Visual Basic của Microsoft Office thành công
Có thể thực hiện thao tác trong Word hoặc Excel, xem macro được tạo ra, rồi sửa mã theo nhu cầu. Đó là một ý tưởng đơn giản nhưng mạnh mẽ, nên thật vui khi thấy nó trong curl
Có vẻ đã không được cập nhật từ lâu: https://github.com/dotnet/Open-XML-SDK/releases/tag/v2.5
Cũng gợi nhớ đến AREXX của Amiga
Để biên dịch thì phải chỉ ra việc liên kết với libcurl, kiểu như thêm
-lcurltronggccVí dụ, có thể tạo địa chỉ IP và
ip_fetcher.cbằngcurl https://ifconfig.me --libcurl ip_fetcher.c, rồi biên dịch bằnggcc -o ip_fetcher ip_fetcher.c -lcurl, sau đó chạy./ip_fetcherđể in ra địa chỉ IPVới những người không viết mã C hằng ngày, ngay cả bước liên kết cơ bản này cũng là thông tin hữu ích
maketiện hơn là tự gõ lệnhcc, thì còn có cách dễ hơnSau
curl https://ifconfig.me --libcurl ip_fetcher.cchỉ cần chạymake LDFLAGS=-lcurl ip_fetcher, rồi./ip_fetcherNhân tiện quảng bá một chút, Hurl là CLI mã nguồn mở dùng libcurl để thực thi và kiểm thử các HTTP request bằng văn bản thuần
Nó tận dụng độ tin cậy cao của libcurl và các tính năng như HTTP/3, đồng thời bổ sung khả năng nối chuỗi request, lấy dữ liệu từ response rồi chuyển sang request tiếp theo, cùng các tính năng kiểm thử response như JSONPath và XPath
Có thêm cú pháp tiện lợi cho request API REST/SOAP/GraphQL, nhưng cốt lõi vẫn chỉ là libcurl, và nếu bật tùy chọn verbose thì còn có thể grep cả lệnh curl. Tôi có tham gia với tư cách maintainer
https://hurl.dev
Sẽ hay biết mấy nếu ffmpeg cũng làm được kiểu này
Daniel Stenberg thực sự rất chăm chút đến chi tiết và trải nghiệm của nhà phát triển lẫn người dùng
Mức độ trau chuốt này thật đáng kinh ngạc
Tôi nhớ chính Daniel Stenberg từng nhắc đến tùy chọn này trong một video dài 3 tiếng nơi ông đi qua hầu hết các tùy chọn dòng lệnh của curl
https://www.youtube.com/watch?v=V5vZWHP-RqU
Tiêu đề bài gửi nên là hai dấu gạch nối (
--), không phải tổ hợp dấu gạch ngang dài và gạch nối (—-)Tùy chọn này có nghĩa là nó có thể tạo ra một chương trình C có thể biên dịch để thay thế script vốn bọc quanh lệnh gọi curl ban đầu sao?
libcurl, nhưng trước giờ phải tự viết mã khungĐúng hơn nên xem nó là điểm khởi đầu giúp khỏi phải lục tài liệu hàng giờ đồng hồ