Преглед изворни кода

Added curl logger for debugging request

Ji Pei пре 10 година
родитељ
комит
2a6e28c9d0

+ 19 - 0
Classes/Network/FLEXNetworkCurlLogger.h

@@ -0,0 +1,19 @@
+//
+// FLEXCurlLogger.h
+// Instagram
+//
+// Created by Ji Pei on 07/27/16
+// Copyright 2004-present Facebook. All Rights Reserved.
+
+#import <Foundation/Foundation.h>
+
+@interface FLEXNetworkCurlLogger : NSObject
+
+/**
+ * Generates a cURL command equivalent to the given request.
+ *
+ * @param request The request to be translated
+ */
++ (NSString *)curlCommandString:(NSURLRequest *)request;
+
+@end

+ 42 - 0
Classes/Network/FLEXNetworkCurlLogger.m

@@ -0,0 +1,42 @@
+//
+// FLEXCurlLogger.m
+// Instagram
+//
+// Created by Ji Pei on 07/27/16
+// Copyright 2004-present Facebook. All Rights Reserved.
+
+#import "FLEXNetworkCurlLogger.h"
+
+@implementation FLEXNetworkCurlLogger
+
++ (NSString *)curlCommandString:(NSURLRequest *)request {
+    __block NSMutableString *curlCommandString = [NSMutableString stringWithFormat:@"curl -v -X %@ ", request.HTTPMethod];
+
+    [curlCommandString appendFormat:@"\'%@\' ", request.URL.absoluteString];
+
+    [request.allHTTPHeaderFields enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSString *val, BOOL *stop) {
+        [curlCommandString appendFormat:@"-H \'%@: %@\' ", key, val];
+    }];
+
+    NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:request.URL];
+    if (cookies) {
+        [curlCommandString appendFormat:@"-H \'Cookie:"];
+        for (NSHTTPCookie *cookie in cookies) {
+            [curlCommandString appendFormat:@" %@=%@;", cookie.name, cookie.value];
+        }
+        [curlCommandString appendFormat:@"\' "];
+    }
+
+    if (request.HTTPBody) {
+        if ([request.allHTTPHeaderFields[@"Content-Length"] intValue] < 1024) {
+            [curlCommandString appendFormat:@"-d \'%@\'",
+             [[NSString alloc] initWithData:request.HTTPBody encoding:NSUTF8StringEncoding]];
+        } else {
+            [curlCommandString appendFormat:@"[TOO MUCH DATA TO INCLUDE]"];
+        }
+    }
+
+    return curlCommandString;
+}
+
+@end

+ 4 - 0
Classes/Network/FLEXNetworkRecorder.m

@@ -7,6 +7,7 @@
 //
 
 #import "FLEXNetworkRecorder.h"
+#import "FLEXNetworkCurlLogger.h"
 #import "FLEXNetworkTransaction.h"
 #import "FLEXUtility.h"
 #import "FLEXResources.h"
@@ -122,6 +123,9 @@ NSString *const kFLEXNetworkRecorderResponseCacheLimitDefaultsKey = @"com.flex.r
 
         [self postNewTransactionNotificationWithTransaction:transaction];
     });
+
+    // generate the curl command for all request to debugger while networking debugging is enabled
+    NSLog(@"%@",[FLEXNetworkCurlLogger curlCommandString:request]);
 }
 
 - (void)recordResponseReceivedWithRequestID:(NSString *)requestID response:(NSURLResponse *)response

+ 3 - 21
Classes/Network/FLEXNetworkTransactionDetailTableViewController.m

@@ -7,6 +7,7 @@
 //
 
 #import "FLEXNetworkTransactionDetailTableViewController.h"
+#import "FLEXNetworkCurlLogger.h"
 #import "FLEXNetworkRecorder.h"
 #import "FLEXNetworkTransaction.h"
 #import "FLEXWebViewController.h"
@@ -53,7 +54,7 @@ typedef UIViewController *(^FLEXNetworkDetailRowSelectionFuture)(void);
     self = [super initWithStyle:UITableViewStyleGrouped];
     if (self) {
         [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleTransactionUpdatedNotification:) name:kFLEXNetworkRecorderTransactionUpdatedNotification object:nil];
-        self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Copy" style:UIBarButtonItemStylePlain target:self action:@selector(copyButtonPressed:)];
+        self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Copy curl" style:UIBarButtonItemStylePlain target:self action:@selector(copyButtonPressed:)];
     }
     return self;
 }
@@ -120,26 +121,7 @@ typedef UIViewController *(^FLEXNetworkDetailRowSelectionFuture)(void);
 
 - (void)copyButtonPressed:(id)sender
 {
-    NSMutableString *requestDetailString = [NSMutableString string];
-
-    for (FLEXNetworkDetailSection *section in self.sections) {
-        if ([section.rows count] > 0) {
-            if ([section.title length] > 0) {
-                [requestDetailString appendString:section.title];
-                [requestDetailString appendString:@"\n\n"];
-            }
-            for (FLEXNetworkDetailRow *row in section.rows) {
-                NSString *rowDescription = [[[self class] attributedTextForRow:row] string];
-                if ([rowDescription length] > 0) {
-                    [requestDetailString appendString:rowDescription];
-                    [requestDetailString appendString:@"\n"];
-                }
-            }
-            [requestDetailString appendString:@"\n\n"];
-        }
-    }
-
-    [[UIPasteboard generalPasteboard] setString:requestDetailString];
+    [[UIPasteboard generalPasteboard] setString:[FLEXNetworkCurlLogger curlCommandString:_transaction.request]];
 }
 
 #pragma mark - Table view data source

+ 8 - 0
FLEX.xcodeproj/project.pbxproj

@@ -13,6 +13,8 @@
 		224D49A91C673AB5000EAB86 /* FLEXRealmDatabaseManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 224D49A51C673AB5000EAB86 /* FLEXRealmDatabaseManager.m */; };
 		224D49AA1C673AB5000EAB86 /* FLEXSQLiteDatabaseManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 224D49A61C673AB5000EAB86 /* FLEXSQLiteDatabaseManager.h */; };
 		224D49AB1C673AB5000EAB86 /* FLEXSQLiteDatabaseManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 224D49A71C673AB5000EAB86 /* FLEXSQLiteDatabaseManager.m */; };
+		2EF6B04D1D494BE50006BDA5 /* FLEXNetworkCurlLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 2EF6B04B1D494BE50006BDA5 /* FLEXNetworkCurlLogger.m */; };
+		2EF6B04E1D494BE50006BDA5 /* FLEXNetworkCurlLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EF6B04C1D494BE50006BDA5 /* FLEXNetworkCurlLogger.h */; };
 		3A4C94251B5B20570088C3F2 /* FLEX.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A4C94241B5B20570088C3F2 /* FLEX.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		3A4C94C51B5B21410088C3F2 /* FLEXArrayExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A4C943C1B5B21410088C3F2 /* FLEXArrayExplorerViewController.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		3A4C94C61B5B21410088C3F2 /* FLEXArrayExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A4C943D1B5B21410088C3F2 /* FLEXArrayExplorerViewController.m */; };
@@ -171,6 +173,8 @@
 		224D49A51C673AB5000EAB86 /* FLEXRealmDatabaseManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FLEXRealmDatabaseManager.m; sourceTree = "<group>"; };
 		224D49A61C673AB5000EAB86 /* FLEXSQLiteDatabaseManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FLEXSQLiteDatabaseManager.h; sourceTree = "<group>"; };
 		224D49A71C673AB5000EAB86 /* FLEXSQLiteDatabaseManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FLEXSQLiteDatabaseManager.m; sourceTree = "<group>"; };
+		2EF6B04B1D494BE50006BDA5 /* FLEXNetworkCurlLogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FLEXNetworkCurlLogger.m; sourceTree = "<group>"; };
+		2EF6B04C1D494BE50006BDA5 /* FLEXNetworkCurlLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FLEXNetworkCurlLogger.h; sourceTree = "<group>"; };
 		3A4C941F1B5B20570088C3F2 /* FLEX.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FLEX.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		3A4C94231B5B20570088C3F2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 		3A4C94241B5B20570088C3F2 /* FLEX.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FLEX.h; sourceTree = "<group>"; };
@@ -570,6 +574,8 @@
 				3A4C94BE1B5B21410088C3F2 /* FLEXNetworkTransactionDetailTableViewController.m */,
 				3A4C94BF1B5B21410088C3F2 /* FLEXNetworkTransactionTableViewCell.h */,
 				3A4C94C01B5B21410088C3F2 /* FLEXNetworkTransactionTableViewCell.m */,
+				2EF6B04C1D494BE50006BDA5 /* FLEXNetworkCurlLogger.h */,
+				2EF6B04B1D494BE50006BDA5 /* FLEXNetworkCurlLogger.m */,
 				3A4C94C11B5B21410088C3F2 /* PonyDebugger */,
 			);
 			path = Network;
@@ -703,6 +709,7 @@
 				3A4C94F71B5B21410088C3F2 /* FLEXArgumentInputNotSupportedView.h in Headers */,
 				3A4C94E51B5B21410088C3F2 /* FLEXUtility.h in Headers */,
 				3A4C94CF1B5B21410088C3F2 /* FLEXImageExplorerViewController.h in Headers */,
+				2EF6B04E1D494BE50006BDA5 /* FLEXNetworkCurlLogger.h in Headers */,
 				3A4C950B1B5B21410088C3F2 /* FLEXFieldEditorViewController.h in Headers */,
 				94A515251C4CA2080063292F /* FLEXExplorerToolbar.h in Headers */,
 				3A4C953C1B5B21410088C3F2 /* FLEXNetworkTransaction.h in Headers */,
@@ -799,6 +806,7 @@
 			files = (
 				942DCD871BAE0CA300DB5DC2 /* FLEXKeyboardShortcutManager.m in Sources */,
 				224D49A91C673AB5000EAB86 /* FLEXRealmDatabaseManager.m in Sources */,
+				2EF6B04D1D494BE50006BDA5 /* FLEXNetworkCurlLogger.m in Sources */,
 				94A515201C4CA1F10063292F /* FLEXWindow.m in Sources */,
 				3A4C95121B5B21410088C3F2 /* FLEXPropertyEditorViewController.m in Sources */,
 				3A4C95391B5B21410088C3F2 /* FLEXNetworkRecorder.m in Sources */,