تبدیل curl به Rust

curl2code دستورات curl را با استفاده از کریت reqwest به کد Rust تبدیل می‌کند. این تبدیل برای حفظ حریم خصوصی کامل، در مرورگر شما از طریق WebAssembly انجام می‌شود. برای Go، مبدل curl به Go ما را بررسی کنید. برای C، curl به C را ببینید. در ادامه مثال‌های کاربردی Rust با async/await آورده شده است.

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

  1. 1

    باز کردن DevTools

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

  2. 2

    رفتن به تب Network

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

  3. 3

    کپی به عنوان cURL

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

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

Rust reqwest چیست؟

کتابخانه reqwest محبوب‌ترین کلاینت HTTP برای Rust است که بر پایه hyper ساخته شده است. این کتابخانه هر دو API مسدودکننده (blocking) و ناهمگام (async)، سریال‌سازی خودکار JSON از طریق serde، TLS، مدیریت کوکی و پشتیبانی از پروکسی را فراهم می‌کند. با cargo add reqwest --features json اضافه کنید. این کتابخانه پیش‌فرضی است که curl2code برای تبدیل‌های Rust استفاده می‌کند.

reqwest در مقابل hyper در مقابل ureq — از کدام استفاده کنم؟

کتابخانه reqwest گزینه اصلی برای اکثر پروژه‌ها است — سطح بالا، غنی از ویژگی و ناهمگام. hyper سطح پایین‌تر است و حداکثر کنترل را می‌دهد (reqwest بر پایه آن ساخته شده است). ureq یک کلاینت حداقلی و فقط مسدودکننده بدون وابستگی به زمان اجرای ناهمگام است. برای رویکرد مشابه کتابخانه استاندارد، curl به Go یا curl به C را ببینید.

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

برای Bearer: client.get(url).bearer_auth(token). برای Basic: client.get(url).basic_auth(user, Some(pass)). یا هدرها را به صورت دستی با .header("Authorization", value) تنظیم کنید. curl2code فلگ‌های -u و -H 'Authorization: ...' را به متدهای مناسب در reqwest تبدیل می‌کند.

چگونه داده‌های فرم چندبخشی را در Rust ارسال کنیم؟

از reqwest::multipart::Form استفاده کنید: با Form::new() ایجاد کنید، فیلدهای متنی را با .text("key", "value") و فایل‌ها را با .file("field", path).await? اضافه کنید. به client.post(url).multipart(form) پاس دهید. curl2code فلگ‌های -F را برای multipart در reqwest مدیریت می‌کند.

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

reqwest مقدار Result برمی‌گرداند که در صورت موفقیت Response و در صورت شکست reqwest::Error را در بر می‌گیرد — از عملگر ? برای انتشار خطا استفاده کنید. response.status().is_success() را بررسی کنید یا response.error_for_status()? را فراخوانی کنید که کدهای غیر 2xx را به خطا تبدیل می‌کند. سیستم نوع Rust تضمین می‌کند که تمام مسیرهای خطا به طور صریح در زمان کامپایل مدیریت شوند.

کدام زمان اجرای ناهمگام (async runtime) برای reqwest لازم است؟

کتابخانه reqwest به طور پیش‌فرض به زمان اجرای tokio نیاز دارد. تابع main خود را با #[tokio::main] علامت‌گذاری کنید. برای استفاده مسدودکننده بدون زمان اجرای ناهمگام، ویژگی blocking را فعال کرده و از reqwest::blocking::Client استفاده کنید. curl2code به طور پیش‌فرض کد ناهمگام با tokio تولید می‌کند. برای اکوسیستم ناهمگام دیگر، curl به Go (goroutines) را ببینید.

چگونه مهلت زمانی را در Rust reqwest تنظیم کنیم؟

روی کلاینت تنظیم کنید: Client::builder().timeout(Duration::from_secs(30)).connect_timeout(Duration::from_secs(10)).build()?. برای هر درخواست: client.get(url).timeout(Duration::from_secs(5)). این‌ها به فلگ‌های --max-time و --connect-timeout در curl نگاشت می‌شوند.

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

یک پروکسی روی سازنده کلاینت تنظیم کنید: Client::builder().proxy(Proxy::https("http://proxy:8080")?).build()?. از پروکسی‌های HTTP، HTTPS و SOCKS5 پشتیبانی می‌کند. reqwest همچنین به طور پیش‌فرض از متغیرهای محیطی HTTP_PROXY و HTTPS_PROXY پیروی می‌کند. curl2code فلگ‌های -x را به پیکربندی پروکسی تبدیل می‌کند.

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

یک دستور curl POST مانند curl -X POST -H "Content-Type: application/json" -d "{"key":"value"}" URL را با استفاده از curl2code به Rust تبدیل کنید. کد تولید شده از client.post(url).json(&data).send().await? استفاده می‌کند. curl2code به طور خودکار فلگ‌های -d/--data با محتوای JSON را تشخیص داده و هدر Content-Type مناسب را در کد reqwest تنظیم می‌کند.

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

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

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

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

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

راهنماهای curl

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