ממיר cURL: מ-cURL ל-Fetch,‏ Python,‏ Axios ועוד

הדביקו פקודת curl, למשל כזו שהועתקה מ-DevTools של הדפדפן, וקבלו קוד מוכן להרצה ב-8 שפות. כותרות, גופי JSON, טפסים, העלאות קבצים, אימות ועוגיות מומרים כולם.

רץ בדפדפן שלכםבלי הרשמהשום דבר לא מועלה

המרה ל-
JavaScript fetch

    

    איך משתמשים בכלי ממיר cURL

    1. העתיקו בקשה כ-cURL: ב-DevTools של Chrome או Firefox, לחצו לחיצה ימנית על בקשה בלשונית Network → Copy → Copy as cURL.
    2. הדביקו אותה בתיבת הקלט. פקודות מרובות שורות עם \, המשכי שורה של Windows עם ^ ומחרוזות $'…' נתמכים.
    3. בחרו את היעד: JavaScript fetch,‏ Axios,‏ Node.js,‏ Python requests,‏ Python httpx,‏ Go,‏ PHP או HTTPie.
    4. קראו את האזהרות שמתחת לפלט. הן מפרטות אפשרויות שאין להן מקבילה בשפת היעד.
    5. העתיקו את הקוד או הורידו אותו כקובץ.

    למה להמיר פקודות curl לקוד?

    curl היא השפה המשותפת של HTTP. תיעוד API מציג דוגמאות ב-curl, כלי DevTools בדפדפן מייצאים בקשות כ-curl, וצוותי תמיכה שולחים שחזורים כ-curl. כשאתם רוצים את הבקשה הזו בתוך אפליקציה, צריך לכתוב אותה מחדש ידנית: להעביר כל -H לאובייקט כותרות, להפוך את -d לגוף הבקשה, להמיר את -u ל-basic auth ולזכור ש--G מעביר את הנתונים ל-query string. הממיר הזה עושה את התרגום בשבילכם ומפיק קוד שאפשר להדביק ישר לפרויקט.

    אפשרויות curl נתמכות

    אפשרותמומרת ל-
    -X, -I, -Gמתודת HTTP (‏POST מוסקת כאשר יש גוף בקשה)
    -H, -A, -e, -bכותרות, User-Agent,‏ Referer ועוגיות
    -d, --data-raw, --data-binary, --data-urlencode, --jsonגוף הבקשה: אובייקטי JSON, שדות טופס או טקסט גולמי
    -Fנתוני טופס multipart, כולל העלאות @file
    -u, --oauth2-bearerBasic auth או טוקן Bearer
    -k, -L, -m, -x, --compressedאימות TLS, הפניות, timeout,‏ proxy ודחיסה

    גופי JSON הופכים לאובייקטים אמיתיים

    כאשר הבקשה שולחת JSON (כותרת Content-Type: application/json, ‏--json, או גוף שמתפרש כ-JSON), הממיר מפיק מבני נתונים טבעיים במקום מחרוזת עם escape: ‏JSON.stringify({...}) עבור fetch, אובייקט רגיל עבור Axios, ו-json= עם dict של Python (‏True, False, None) עבור requests ו-httpx. כך קל לערוך את המטען ולמלא אותו במשתנים.

    הבדלים שכדאי לזכור

    דפדפנים לא יכולים לבטל בדיקת תעודות או לנתב בקשה בודדת דרך proxy, ולכן -k ו--x מופיעים רק כהערות בקוד fetch לדפדפן. curl לא עוקב אחרי הפניות אלא אם מעבירים -L, בעוד ש-fetch,‏ requests ו-Go עוקבים אחריהן כברירת מחדל. גוף שנשלח עם -d ללא Content-Type מקודד על ידי curl כטופס; אם הוא נראה כמו JSON, הממיר שולח אותו כ-JSON ומודיע על כך באזהרה.

    שאלות נפוצות

    האם פקודת ה-curl שלי נשלחת לשרת?
    לא. הניתוח ויצירת הקוד מתבצעים כולם בדפדפן שלכם. פקודות שהועתקו מ-DevTools מכילות לעתים קרובות עוגיות וטוקנים, ולכן שום דבר לא מועלה או נשמר.
    איך מעתיקים בקשה כ-cURL מ-Chrome?
    פתחו את DevTools‏ (F12), עברו ללשונית Network, לחצו לחיצה ימנית על הבקשה ובחרו Copy → Copy as cURL (bash). גם גרסת ה-cmd ל-Windows עובדת כאן.
    האם יש תמיכה בהעלאת קבצים?
    כן. -F name=@file הופך ל-FormData ב-JavaScript, ל-dict בשם files= ב-Python, ל-mime/multipart ב-Go ול-CURLFile ב-PHP. ‏-d @file ו--T file קוראים את גוף הבקשה מקובץ.
    מה קורה לאפשרויות שהממיר לא מכיר?
    הן מופיעות כאזהרות מתחת לפלט, כך ששום דבר לא נעלם בשקט. דגלים שמשפיעים רק על הפלט, כמו -s, -v או -o, מתעלמים מהם כי הם לא משנים את הבקשה.
    האם להשתמש ב-requests או ב-httpx ב-Python?
    requests היא ברירת המחדל הוותיקה לסקריפטים סינכרוניים. ל-httpx יש API כמעט זהה, הוא מוסיף תמיכה ב-HTTP/2 וב-async, ולא עוקב אחרי הפניות אלא אם מבקשים, מה שקרוב יותר להתנהגות של curl.

    כלים קשורים