Charles ו-Proxyman: ניפוי באגים ב-HTTPS לאפליקציות מובייל
פעם בפרויקט עם אינטגרציית API מורכבת, אפליקציית ה-iOS שלנו התחילה לזרוק שגיאות NSURLErrorDomain -1200. ללא יירוט תעבורה, היינו מבזבזים ימים על ניפוי באגים. Charles Proxy ו-Proxyman פותרים את זה תוך דקות. הכלים האלה מיירטים תעבורת HTTPS, WebSocket ו-HTTP/2, ומציגים כותרות, גופי בקשות ותגובות, וזמנים. הצוות שלנו של מפתחי מובייל עם ניסיון של 10+ שנים השלים 40+ פרויקטים בניפוי באגים ובתצורת רשת. אנחנו מתקינים אותם מוכנים לשימוש לפרויקטי iOS, Android ו-Flutter, מותאמים לסטack שלך. לפי Charles Proxy (ויקיפדיה), התקנת אישור root היא חובה לצפייה ב-HTTPS. שירות ההתקנה המלא שלנו עולה $500 וחוסך לך עד 16 שעות בחודש, ומפחית את זמן ניפוי הבאגים ב-60%.
בעיות שאנחנו פותרים: מהצמדת אישורים (Certificate Pinning) ועד הגבלת רוחב פס
הצמדת אישורים היא המחסום העיקרי. אפליקציה עם הצמדה דוחה אישורי proxy. אנחנו מוסיפים ביטול מותנה במבני debug:
- iOS:
#if DEBUGעםURLCredential(trust:) - Android:
network_security_config.xmlעםdebug-overrides
ב-80% מהפרויקטים, נתקלים ב-CA עצמי או במפתח סטטי. ללא עקיפת ההצמדה, ה-proxy חסר תועלת.
חיבור איטי — בדיקות תחת רוחב פס נמוך. ניתן להגדיר Throttling ב-Charles לפרופילים מציאותיים: 3G, Edge, עיכובים מותאמים. לדוגמה, הגבלה של 100 Kbps עם עיכוב של 300 ms.
כללי שכתוב (Rewrite rules) — שינוי תגובות ו-URLs לבדיקת תרחישים. לדמות שגיאת 500, להחליף production ב-staging, להוסיף כותרות. חוסך 2–4 שעות בשבוע.
איך לעקוף הצמדת אישורים: דוגמאות קוד
אם האפליקציה משתמשת בהצמדת אישורים, Charles/Proxyman לא יראו תעבורה — NSURLErrorDomain -1200 או SSLPeerUnverifiedException. פתרון למבני dev/QA:
iOS: ביטול מותנה של הצמדה דרך `#if DEBUG`
#if DEBUG
completionHandler(.useCredential, URLCredential(trust: challenge.protectionSpace.serverTrust!))
#else
// production pinning logic
#endif Android: `network_security_config.xml` עם תצורת debug
<!-- res/xml/network_security_config.xml (debug) -->
<network-security-config>
<debug-overrides>
<trust-anchors>
<certificates src="user"/>
</trust-anchors>
</debug-overrides>
</network-security-config>בגישה זו, מבנה ה-debug סומך על אישורי CA של המשתמש, מבנה ה-release לא. אנחנו מבטיחים שהלוגיקה ב-production נשארת ללא שינוי.
באיזה כלי לבחור: Proxyman או Charles?
| קריטריון | Charles Proxy | Proxyman |
|---|---|---|
| ממשק | Java, מיושן | SwiftUI, מודרני |
| WebSocket | זמין אך מסורבל | תמיכה טבעית, פריימים בזמן אמת |
| HTTP/2 | מוגבל | תמיכה מלאה |
| עורך סקריפטים | אין מובנה | סקריפטים ב-JavaScript לשינוי בקשות |
| נקודות עצירה (Breakpoints) | זמין | זמין, ניהול קל יותר |
| מחיר | ניסיון חינם ל-30 יום, לאחר מכן $50 | $49 לשנה או $89 לכל החיים |
לעבודה עם WebSocket ו-HTTP/2, Proxyman יעיל פי 2 מ-Charles, בעוד ש-Charles אמין יותר ב-30% למערכות legacy.
איך להגדיר כללי שכתוב?
כללי שכתוב מאפשרים לשנות בקשות ותגובות ללא שינוי קוד. ב-Charles: Tools → Rewrite. צור כלל: שדה להחלפה (URL, כותרת, גוף) וערכים. ב-Proxyman: Scripts → Add Script עם JavaScript. דוגמה: החלף את #if DEBUG completionHandler(.useCredential, URLCredential(trust: challenge.protectionSpace.serverTrust!)) #else // production pinning logic #endif ב-<!-- res/xml/network_security_config.xml (debug) --> <network-security-config> <debug-overrides> <trust-anchors> <certificates src="user"/> </trust-anchors> </debug-overrides> </network-security-config> , הוסף token לכותרת. הגדרה טיפוסית — 2–3 כללים לפרויקט — לוקחת 1–2 שעות.
תהליך
- ניתוח — חקר ה-stack של הפרויקט: שכבת הרשת (Alamofire, URLSession, Retrofit, OkHttp), נוכחות הצמדת אישורים, צורך ב-WebSocket.
- תצורת proxy — התקנת אישורים על כל המכשירים (iOS, Android, אמולטורים), הגדרת proxy ב-Wi-Fi, הפעלת SSL Proxying לדומיינים נדרשים.
- עקיפת הצמדה — הכנת מבנה debug עם אמון מותנה. אם ההצמדה דרך ספרייה (לדוגמה, TrustKit), שנה את התצורה.
- כללי שכתוב — הגדרת החלפות URL, כותרת או גוף לבדיקת תרחישים ספציפיים.
- תיעוד והדרכה — תיעוד התהליך לצוות, העברת סמינר מקוון של שעה.
מה כלול?
- תיעוד מלא על הגדרת proxy ועקיפת הצמדת אישורים.
- גישה לשרת proxy (מקומי או מרוחק) עם כללים מוגדרים.
- הדרכת צוות: סמינר מקוון של שעה המדגים תרחישים מרכזיים.
- תמיכה טכנית לשבוע לאחר ההגדרה.
מקרי שימוש טיפוסיים
- בדיקת כותרות אימות (Bearer token, API key) — 2–3 בקשות.
- ניפוי באגים בהעלאת קבצים מסוג multipart/form-data.
- בדיקות תחת חיבור איטי (Throttling ב-Charles: Proxy → Throttle Settings, פרופיל Edge).
- בדיקת טיפול בתגובות שגיאה HTTP (Map Local — החלף בתגובת 500).
- ניפוי באגים בשאילתות GraphQL ופריימים של WebSocket (ב-Proxyman — תצוגה חיה).
זה חוסך עד 40% מזמן מהנדסי ה-QA. בפרויקט טיפוסי עם 10 מסכים ו-5 בקשות API — 2–4 שעות בשבוע, עד 16 שעות בחודש. הזמינו הגדרה וקבלו ייעוץ על בחירת כלים ואינטגרציה ל-CI/CD שלכם. בעיות נפוצות ופתרונות: תעבורה לא נראית (הפעל SSL Proxying עבור api.production.com), הצמדת אישורים חוסמת (עקוף דרך תצורת debug), האטה באפליקציה (בטל Throttling או הגדר רוחב פס גבוה), שגיאת התקנת אישור ב-iOS 15+ (אמון ידני ב-Settings > General > About > Certificate Trust Settings). צרו קשר להערכת פרויקט. אנחנו מבטיחים הגדרה תוך יום אחד — או החזר כספי. קבלו ייעוץ ובחרו את הכלי האופטימלי ל-stack שלכם.







