تبدیل curl به OCaml

دستورات curl را با استفاده از Cohttp به کد OCaml تبدیل کنید. curl2code کاملاً در مرورگر شما از طریق WebAssembly اجرا می‌شود — داده‌های شما خصوصی می‌مانند. برای Rust، مبدل curl به Rust ما را امتحان کنید. برای Elixir، curl به Elixir را ببینید. در ادامه مثال‌های آماده OCaml آورده شده است.

نحوه کپی کردن curl از مرورگر

  1. 1

    باز کردن DevTools

    کلید F12 یا Ctrl+Shift+I را فشار دهید تا ابزارهای توسعه‌دهنده مرورگر باز شوند.

  2. 2

    رفتن به تب Network

    روی تب Network کلیک کنید و عملیاتی که باعث ارسال درخواست HTTP می‌شود را انجام دهید.

  3. 3

    کپی به عنوان cURL

    روی درخواست راست‌کلیک کنید ← CopyCopy as cURL. سپس آن را در بالا جایگذاری کنید.

سوالات متداول

OCaml Cohttp چیست؟

Cohttp کتابخانه استاندارد کلاینت و سرور HTTP برای OCaml است. این کتابخانه از هر دو بک‌اِند Lwt (رشته‌های سبک‌وزن) و Async برای I/O همزمان پشتیبانی می‌کند. با دستور opam install cohttp-lwt-unix نصب می‌شود. این کتابخانه یک API تابعی و Type-safe برای درخواست‌های HTTP ارائه می‌دهد. curl2code از Cohttp برای تمام تبدیل‌های OCaml استفاده می‌کند.

Cohttp در مقابل ocurl در مقابل piaf — از کدام استفاده کنیم؟

Cohttp کتابخانه استاندارد HTTP در OCaml با پشتیبانی از Lwt/Async است. ocurl در واقع libcurl را بسته‌بندی می‌کند و دسترسی به تمام ویژگی‌های curl را از طریق OCaml فراهم می‌کند. piaf جدیدتر و بر پایه HTTP/2 است. برای کدنویسی به سبک رایج OCaml از Cohttp و زمانی که به ویژگی‌های خاص curl نیاز دارید از ocurl استفاده کنید. برای زبان‌های تابعی مشابه، curl به Elixir یا curl به Clojure را ببینید.

چگونه احراز هویت را در OCaml مدیریت کنیم؟

یک هدر Authorization به درخواست اضافه کنید: Header.add headers "Authorization" ("Bearer " ^ token). برای احراز هویت Basic، اعتبارنامه‌ها را با استفاده از پکیج base64 انکود کنید. هدرهای Cohttp تغییرناپذیر (immutable) هستند — آن‌ها را با Header.of_list بسازید یا فراخوانی‌های Header.add را به هم زنجیره کنید.

چگونه داده‌های فرم multipart را در OCaml ارسال کنیم؟

بدنه multipart را به صورت دستی با رشته‌های boundary بسازید، یا از کتابخانه‌ای مانند multipart_form استفاده کنید. هدر Content-Type را همراه با boundary تنظیم کنید. بدنه در Cohttp یک رشته ساده یا استریم است — پی‌لود multipart را مطابق با RFC 2046 فرمت‌دهی کنید. curl2code تبدیل فلگ -F را مدیریت می‌کند.

چگونه خطاها را در درخواست‌های HTTP در OCaml مدیریت کنیم؟

کتابخانه Cohttp به همراه Lwt پرامیس‌ها را برمی‌گرداند — از سینتکس Lwt.catch یا try%lwt ... with برای مدیریت خطا استفاده کنید. کد وضعیت پاسخ را با Response.status response بررسی کنید. سیستم تایپ OCaml تضمین می‌کند که موارد شکست را مدیریت کنید. از pattern matching روی کدهای وضعیت برای مدیریت جامع استفاده کنید.

چگونه درخواست‌های HTTP همزمان در OCaml ایجاد کنیم؟

با بک‌اِند Lwt: از Lwt.all [request1; request2] برای اجرای موازی یا Lwt_list.map_p برای نگاشت روی URLها استفاده کنید. با Async: از Deferred.all استفاده کنید. همزمانی مشارکتی OCaml از طریق Lwt یا Async، یک I/O همزمان ایمن و کارآمد را بدون نگرانی‌های مربوط به ایمنی رشته‌ها (thread safety) فراهم می‌کند.

چگونه تایم‌اوت‌ها را در OCaml تنظیم کنیم؟

با Lwt، از Lwt.pick [request; Lwt_unix.sleep timeout >>= fun () -> Lwt.fail Timeout] برای رقابت بین یک درخواست و یک تایمر استفاده کنید. Cohttp گزینه‌های تایم‌اوت داخلی ندارد — پرامیس Lwt را با یک ترکیب‌کننده تایم‌اوت بپوشانید. برای تلاش مجدد (retry)، یک تابع بازگشتی با تعداد تلاش‌های کاهشی پیاده‌سازی کنید.

چگونه از پروکسی در OCaml استفاده کنیم؟

کتابخانه Cohttp پشتیبانی داخلی از پروکسی ندارد. برای نیازهای پروکسی از ocurl (اتصالات libcurl) استفاده کنید: گزینه CURLOPT_PROXY را تنظیم کنید. متناوباً، متغیر محیطی HTTP_PROXY را تنظیم کرده و اتصال را به صورت دستی برای مسیریابی از طریق هاست و پورت پروکسی پیکربندی کنید.

چگونه یک درخواست POST با بدنه JSON در OCaml ارسال کنیم؟

یک دستور curl POST مانند curl -X POST -H "Content-Type: application/json" -d '{"key":"value"}' URL را با استفاده از curl2code به OCaml تبدیل کنید. کد تولید شده از Client.post ~body:(Cohttp_lwt.Body.of_string json) uri استفاده می‌کند. curl2code به طور خودکار فلگ‌های -d/--data با محتوای JSON را تشخیص داده و هدر Content-Type مناسب را در کد Cohttp تنظیم می‌کند.

چگونه احراز هویت با Bearer token را در OCaml اضافه کنیم؟

دستور curl -H "Authorization: Bearer YOUR_TOKEN" URL را به curl2code بدهید تا کد Cohttp را با هدر احراز هویت تولید کند: Header.add headers 'Authorization' 'Bearer YOUR_TOKEN'. curl2code توکن‌های Bearer را از هر دو فلگ -H "Authorization: Bearer ..." و --oauth2-bearer تشخیص می‌دهد. برای Basic auth، از -u user:pass استفاده کنید.

چگونه هدر Content-Type را در OCaml تنظیم کنیم؟

curl2code دستور curl -H "Content-Type: application/json" URL را به کد Cohttp با هدر مناسب تبدیل می‌کند: Header.add headers 'Content-Type' 'application/json'. برای داده‌های -d، دستور curl به طور پیش‌فرض از application/x-www-form-urlencoded استفاده می‌کند؛ برای آپلودهای فرم -F، از multipart/form-data استفاده می‌کند. curl2code هر کدام را به API صحیح Cohttp نگاشت می‌کند.

لینک‌های مفید

راهنماهای curl

تبدیل curl به زبان‌های دیگر