تبدیل curl به C
curl2code دستورات curl را با استفاده از libcurl به کد C تبدیل میکند. این تبدیل برای حفظ حریم خصوصی کامل، در مرورگر شما از طریق WebAssembly انجام میشود. برای Rust، مبدل curl به Rust ما را بررسی کنید. برای Go، curl به Go را ببینید. در ادامه مثالهای کاربردی C با مدیریت صحیح حافظه آورده شده است.
نحوه کپی کردن curl از مرورگر
- 1
باز کردن DevTools
کلید F12 یا Ctrl+Shift+I را فشار دهید تا ابزارهای توسعهدهنده مرورگر باز شوند.
- 2
رفتن به تب Network
روی تب Network کلیک کنید و عملیاتی که باعث ارسال درخواست HTTP میشود را انجام دهید.
- 3
کپی به عنوان cURL
روی درخواست راستکلیک کنید ← Copy ← Copy as cURL. سپس آن را در بالا جایگذاری کنید.
سوالات متداول
libcurl چیست؟
libcurl کتابخانه C پشت ابزار خط فرمان curl است. این کتابخانه پرتابلترین و پرکاربردترین کتابخانه کلاینت HTTP موجود است که از بیش از ۲۵ پروتکل پشتیبانی میکند. توسط هزاران اپلیکیشن و سیستمهای نهفته استفاده میشود. آن را با مدیریت پکیج سیستم خود اضافه کنید یا به صورت استاتیک لینک کنید. curl2code کد libcurl C را با استفاده از رابط easy تولید میکند.
رابط easy در مقابل multi در libcurl — از کدام استفاده کنیم؟
رابط easy (curl_easy_*) برای انتقالهای همزمان تکی است — ساده و سرراست. رابط multi (curl_multi_*) انتقالهای همزمان غیرمسدودکننده را در یک رشته (thread) واحد امکانپذیر میکند. از easy برای اسکریپتها و ابزارهای ساده و از multi برای اپلیکیشنهای با کارایی بالا استفاده کنید. برای یک زبان سطح بالاتر از خانواده C، curl به Rust را ببینید.
چگونه احراز هویت را با libcurl مدیریت کنیم؟
برای Bearer: یک هدر سفارشی با curl_slist_append(headers, "Authorization: Bearer token") تنظیم کنید. برای احراز هویت Basic: curl_easy_setopt(curl, CURLOPT_USERPWD, "user:pass"). libcurl به طور خودکار اعتبارنامههای Basic را انکود میکند. curl2code پرچمهای -u و هدر را به فراخوانیهای صحیح API در C تبدیل میکند.
چگونه دادههای multipart form را با libcurl ارسال کنیم؟
از MIME API (libcurl 7.56+) استفاده کنید: curl_mime_init() برای ایجاد ساختار mime، curl_mime_addpart() برای هر فیلد، curl_mime_name() و curl_mime_filedata() برای آپلود فایل. با CURLOPT_MIMEPOST تنظیم کنید. با curl_mime_free() حافظه را آزاد کنید.
چگونه خطاها را با libcurl مدیریت کنیم؟
هر تابع curl_easy_* یک CURLcode برمیگرداند — آن را با CURLE_OK بررسی کنید. از curl_easy_strerror(code) برای پیامهای قابل خواندن توسط انسان استفاده کنید. CURLOPT_ERRORBUFFER را برای رشتههای خطای دقیق تنظیم کنید. وضعیت HTTP را با curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &code) دریافت کنید.
چگونه حافظه را در libcurl مدیریت کنیم؟
همیشه پس از اتمام کار با یک هندل، curl_easy_cleanup() را فراخوانی کنید. لیستهای هدر را با curl_slist_free_all() آزاد کنید. ساختارهای MIME را با curl_mime_free() آزاد کنید. برای کالبکهای نوشتن، تخصیص بافر خود را مدیریت کنید. curl_global_cleanup() را یک بار در پایان برنامه فراخوانی کنید. عدم آزادسازی منابع باعث نشت حافظه میشود.
چگونه تایماوتها را در libcurl تنظیم کنیم؟
CURLOPT_CONNECTTIMEOUT را برای تایماوت اتصال و CURLOPT_TIMEOUT را برای کل زمان انتقال (هر دو به ثانیه) تنظیم کنید. برای دقت میلیثانیه، از CURLOPT_CONNECTTIMEOUT_MS و CURLOPT_TIMEOUT_MS استفاده کنید. اینها دقیقاً همان گزینههایی هستند که CLI کِرل با --connect-timeout و --max-time استفاده میکند.
چگونه یک پروکسی را با libcurl پیکربندی کنیم؟
CURLOPT_PROXY را روی URL پروکسی تنظیم کنید: curl_easy_setopt(curl, CURLOPT_PROXY, "http://proxy:8080"). برای SOCKS5: CURLOPT_PROXYTYPE را روی CURLPROXY_SOCKS5 تنظیم کنید. برای احراز هویت پروکسی: CURLOPT_PROXYUSERPWD. libcurl همچنین از متغیر محیطی http_proxy پیروی میکند.
چگونه یک درخواست POST با بدنه JSON در C ارسال کنیم؟
یک دستور curl POST مانند curl -X POST -H "Content-Type: application/json" -d "{"key":"value"}" URL را با استفاده از curl2code به C تبدیل کنید. کد تولید شده از curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json_string) استفاده میکند. curl2code به طور خودکار فلگهای -d/--data با محتوای JSON را تشخیص داده و هدر Content-Type مناسب را در کد libcurl تنظیم میکند.
چگونه احراز هویت با Bearer token را در C اضافه کنیم؟
دستور curl -H "Authorization: Bearer YOUR_TOKEN" URL را به curl2code بدهید تا کد libcurl را با هدر احراز هویت تولید کند: struct curl_slist *headers = curl_slist_append(NULL, "Authorization: Bearer TOKEN"). curl2code توکنهای Bearer را از هر دو فلگ -H "Authorization: Bearer ..." و --oauth2-bearer تشخیص میدهد. برای Basic auth، از -u user:pass استفاده کنید.
چگونه هدر Content-Type را در C تنظیم کنیم؟
curl2code دستور curl -H "Content-Type: application/json" URL را به کد libcurl با هدر مناسب تبدیل میکند: curl_slist_append(headers, "Content-Type: application/json"). برای دادههای -d، دستور curl به طور پیشفرض از application/x-www-form-urlencoded استفاده میکند؛ برای آپلودهای فرم -F، از multipart/form-data استفاده میکند. curl2code هر کدام را به API صحیح libcurl نگاشت میکند.