Menu

ממיר cURL

להמיר כל פקודת curl ל-fetch, axios, Python requests, Go, PHP ועוד.

מאת Nethanel Bar, Co-founder & CEO

עודכן לאחרונה

מוכנים ללמוד תכנות באמת?

ב-Coddy לומדים דרך כתיבת קוד אמיתי בדפדפן: שיעורים אינטראקטיביים, משוב מיידי ועזרה מ-AI כשנתקעים.

מה זה ממיר cURL?

ממיר cURL הופך פקודת curl (הפורמט שכל תיעוד API, כל ייצוא מ-Postman וכל עוזר AI מפיקים) לקוד מוכן להדבקה בשפת התכנות שאתם באמת עובדים בה. כותרות, מחרוזות שאילתה, גופי JSON, העלאות multipart, אימות basic ועוגיות עוברים כולם, כך שלא צריך לתרגם את הבקשה ידנית.

curl היא הדרך האוניברסלית לתאר בקשת HTTP, אבל כמעט אף פעם לא *מריצים* curl בפרודקשן. מריצים fetch של JavaScript, requests של Python, net/http של Go או כל מה שה-stack שלכם משתמש בו. הכלי הזה מגשר על הפער: הדביקו את ה-curl, לחצו על לשונית והעתיקו את הקוד.

הכול רץ מקומית בדפדפן. פקודת ה-curl, הכותרות והטוקנים שלכם לא יוצאים מהמחשב, וזה חשוב כשמדביקים פקודות שכוללות bearer tokens אמיתיים או עוגיות session.

מה תלמדו תוך כדי המרה

  • דגלי curl ממופים למושגים מוגדרים בכל לקוח HTTP: -H הוא כותרת בקשה, -d הוא גוף, -X הוא המתודה, -u הוא אימות basic, -F הוא שדה בטופס multipart.
  • אם curl רואה גוף (-d, --data, -F) ואין -X, ברירת המחדל היא POST. זו אותה ברירת מחדל שרוב הלקוחות משתמשים בה, כך ש--X שלא צוין עדיין הופך ל-POST בפלט.
  • גופי JSON שונים מגופי טופס. Content-Type: application/json אומר שהגוף נשלח כמו שהוא, ו-application/x-www-form-urlencoded אומר שזוגות מפתח/ערך מחוברים עם &.
  • -G מעביר את הגוף למחרוזת השאילתה בבקשות GET. הפלט משקף את זה: תראו את params / query מלאים, ושום גוף לא נשלח.

איך להמיר curl לקוד, צעד אחר צעד

  1. הדביקו את פקודת ה-curl

    הדביקו את הפקודה המלאה, כולל המשכי שורה עם \ מתיעוד שהעתקתם, לתיבת הקלט. המפענח מנרמל מרכאות מסולסלות וסימני prompt של PowerShell באופן אוטומטי.

  2. בחרו את שפת היעד

    הלשוניות כוללות JavaScript fetch, TypeScript, Node axios, Python requests, Python httpx, Go, PHP, Ruby, Java HttpClient, C# HttpClient, HTTPie ו-PowerShell. מעבר בין לשוניות לא עולה כלום: הפענוח רץ פעם אחת.

  3. בדקו את הבקשה המפוענחת

    פתחו את חלונית *הבקשה המפוענחת* כדי לוודא שהמתודה, ה-URL, הכותרות, סוג הגוף ואפשרויות כמו insecure או follow redirects עברו כמו שציפיתם.

  4. העתיקו והתאימו את האימות

    העתיקו את הקוד שנוצר לפרויקט שלכם. אם ה-curl כלל bearer token או עוגייה, החליפו את הערך המילולי במשתנה סביבה לפני ה-commit.

טבלת עזר לדגלי cURL

הדגלים שהממיר מבין ולמה הם ממופים בקוד שנוצר.

Flagמשמעותדוגמה
-X, --requestמתודת HTTP-X POST
-H, --headerכותרת בקשה (אפשר לחזור עליה)-H 'Accept: application/json'
-d, --dataגוף הבקשה, מקודד URL כברירת מחדל-d 'name=Ada&age=30'
--data-rawגוף בלי הרחבת @file--data-raw '$body'
--data-urlencodeקידוד אחוזים לחלק מהגוף--data-urlencode 'q=hello world'
-F, --formשדה בטופס multipart (השתמשו ב-@file לקבצים)-F 'avatar=@photo.jpg'
-u, --userאימות basic → Authorization: Basic …-u alice:s3cret
-G, --getהעברת הגוף למחרוזת השאילתה ושליחת GET-G -d 'q=ada'
-b, --cookieכותרת Cookie-b 'session=abc'
-A, --user-agentכותרת User-Agent-A 'MyApp/1.0'
-L, --locationמעקב אחרי הפניות 3xx-L
-k, --insecureדילוג על אימות TLS (רק בפיתוח!)-k
--compressedקבלת תגובה ב-gzip/deflate/br--compressed
--max-timeזמן קצוב לכל הבקשה, בשניות--max-time 30

דוגמאות להמרת cURL

GET עם מחרוזת שאילתה וכותרת אימות

curl
curl 'https://api.example.com/v1/lessons?limit=20&track=python' \  -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.demo'
JavaScript (fetch)
const response = await fetch('https://api.example.com/v1/lessons?limit=20&track=python', {  method: 'GET',  headers: {    'Authorization': 'Bearer eyJhbGciOiJIUzI1NiJ9.demo'  }});const data = await response.json();

פרמטרי שאילתה ב-URL נשארים ב-URL: הממיר לא מפצל אותם מחדש לאובייקט params נפרד עבור fetch. ב-axios וב-requests תראו אותם מועברים ל-params / params= לטובת קריאות.

POST עם גוף JSON

curl
curl 'https://api.example.com/v1/users' \  -H 'Content-Type: application/json' \  --data-raw '{"name":"Ada","age":36}'
Python (requests)
import requests
headers = {    'Content-Type': 'application/json',}json_data = {"name":"Ada","age":36}
response = requests.post('https://api.example.com/v1/users', headers=headers, json=json_data)response.raise_for_status()

כשהגוף מתפענח כ-JSON ו-Content-Type הוא application/json, הממיר מפיק json= עבור requests ו-data: (אובייקט מפוענח) עבור axios. אם JSON.parse נכשל, המחרוזת המקורית נשמרת כמו שהיא ולעולם לא נכתבת מחדש.

העלאת קובץ multipart

curl
curl 'https://api.example.com/upload' \  -F 'caption=Hello' \  -F 'photo=@./avatar.jpg'
Python (requests)
import requests
files = {    'caption': (None, 'Hello'),    'photo': open('./avatar.jpg', 'rb'),}
response = requests.post('https://api.example.com/upload', files=files)response.raise_for_status()

-F field=@file הופך להעלאת קובץ אמיתית (open('…', 'rb') ב-Python, FormData.append ב-JavaScript). שדות -F רגילים הופכים לערכי טופס רגילים. בתצוגה בדפדפן מופיע placeholder בשם TODO עבור קבצים שתצטרכו לספק בזמן ריצה.

אימות basic + עוגייה

curl
curl 'https://api.example.com/me' \  -u alice:s3cret \  -b 'session=2f9a; theme=dark'
JavaScript (fetch)
const response = await fetch('https://api.example.com/me', {  method: 'GET',  headers: {    'Authorization': 'Basic YWxpY2U6czNjcmV0',    'Cookie': 'session=2f9a; theme=dark'  }});

אימות basic מתכווץ לכותרת Authorization אחת. העוגיות מחוברות עם ; ונשלחות ככותרת Cookie אחת, בדיוק כמו ש-curl עושה ברשת.

טעויות נפוצות בהמרת curl

  • הדבקת curl עם מרכאות מסולסלות (', ', ", ") מפוסט בבלוג. הן נראות כמו מרכאות אבל שוברות את הפענוח של ה-shell. הממיר מנרמל אותן, אבל אם אפשר, העתיקו את הפקודה המקורית.
  • השארת -k (--insecure) בפרודקשן. הדגל מבטל את אימות תעודת ה-TLS: בסדר לפיתוח מקומי, מסוכן בתעבורה אמיתית.
  • שכחה ש---data-raw ו---data מתנהגים אחרת: --data מקודד URL את הקלט. השתמשו ב---data-raw לגופי JSON שכוללים @ או &.
  • הדבקת פקודת curl.exe של Windows בלי להמיר את המשכי השורה ^ ל-\. הממיר מטפל בזה, אבל המפענח מחמיר עם מרכאות, אז בדקו שוב את גבולות המחרוזות.
  • העתקת bearer tokens או עוגיות לניהול גרסאות אחרי ההמרה. החליפו אותם במשתני סביבה (process.env.API_TOKEN, os.environ['API_TOKEN']) לפני ה-commit.

שאלות נפוצות על cURL Converter

אילו שפות הממיר תומך בהן?
שתים עשרה שפות יעד מובנות: JavaScript (fetch), TypeScript (fetch), Node (axios), Python (requests), Python (httpx), Go (net/http), PHP (curl), Ruby (Net::HTTP), Java (HttpClient), C# (HttpClient), HTTPie ו-PowerShell (Invoke-RestMethod). כולן נוצרות מאותו ייצוג מפוענח, כך שמעבר בין לשוניות הוא מיידי.
האם הוא מטפל בהעלאות multipart ובדגלי -F?
כן. -F field=value הופך לשדה טופס רגיל, ו--F file=@path הופך להעלאת קובץ אמיתית עם FormData (JS), files= (Python), CURLFile (PHP) וכן הלאה. נתיבי קבצים מופיעים כ-placeholders בשם TODO, ותצטרכו לחבר אותם ל-File, ל-Buffer או ל-stream בזמן ריצה.
האם פקודת ה-curl שלי נשלחת לשרת?
לא. המפענח וכל מחוללי הקוד רצים בדפדפן. bearer tokens, עוגיות וגופי בקשות לא יוצאים מהמחשב שלכם, וכברירת מחדל אנחנו אפילו מסתירים אותם בתצוגה של *הבקשה המפוענחת*.
למה ה-curl שלי מ-Windows נראה אחרת?
curl.exe של Windows (וגם CMD/PowerShell) משתמש ב-^ או ב-backtick ` להמשך שורה, ועשוי לסמן מחרוזות במרכאות בצורה אחרת. הממיר מנרמל את הדפוסים הנפוצים של Windows, אבל אם הדבקה נראית שגויה, נסו להעתיק את הפקודה כשורה אחת.
האם הוא תומך בבקשות GraphQL?
כן. בקשת GraphQL היא פשוט POST עם גוף JSON שמכיל query ו-variables. הדביקו את ה-curl, והממיר יפיק POST רגיל עם JSON בשפת היעד שלכם. טפלו במבנה התגובה ({ data, errors }) כמו בכל לקוח GraphQL.
אפשר להדביק curl שיוצא מ-Postman?
כן. הייצוא *Code → cURL* של Postman נתמך במלואו, כולל העיצוב הרב-שורתי עם \. כך גם ה-curl שנוצר מ-*Copy as cURL* ב-DevTools של Chrome ו-Firefox.
fetch או axios: איזה פלט לבחור?
השתמשו ב-fetch אם הוא כבר קיים בפרויקט שלכם (הוא מובנה בדפדפנים וב-Node מודרני). השתמשו ב-axios אם אתם צריכים פענוח JSON אוטומטי, interceptors לבקשות, ניסיונות חוזרים או אירועי התקדמות, יכולות ש-fetch לא מספק מהקופסה.

למידע נוסף

כלי פיתוח נוספים

איור של שפות התכנות ב-Coddy

ללמוד תכנות עם Coddy

להתחיל