### Create and Start a Basic GCDWebServer Source: https://context7.com/swisspol/gcdwebserver/llms.txt Initializes a GCDWebServer, adds a default handler for GET requests, and starts the server on port 8080. Requires GCDWebServer and GCDWebServerDataResponse imports. ```objectivec #import "GCDWebServer.h" #import "GCDWebServerDataResponse.h" // Create and configure server GCDWebServer* webServer = [[GCDWebServer alloc] init]; // Add a handler for GET requests on any URL [webServer addDefaultHandlerForMethod:@"GET" requestClass:[GCDWebServerRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) { return [GCDWebServerDataResponse responseWithHTML:@"
Hello World
"]; }]; // Start server on port 8080 NSError* error = nil; if ([webServer startWithPort:8080 bonjourName:nil]) { NSLog(@"Server running at %@", webServer.serverURL); } else { NSLog(@"Failed to start server: %@", error); } // To stop the server [webServer stop]; ``` -------------------------------- ### macOS Swift Command Line HTTP Server Source: https://github.com/swisspol/gcdwebserver/blob/master/README.md Set up a basic HTTP server using Swift on macOS. This example demonstrates adding a handler and starting the server. ```Swift import Foundation import GCDWebServer func initWebServer() { let webServer = GCDWebServer() webServer.addDefaultHandler(forMethod: "GET", request: GCDWebServerRequest.self, processBlock: {request in return GCDWebServerDataResponse(html:"Hello World
") }) webServer.start(withPort: 8080, bonjourName: "GCD Web Server") print("Visit \(webServer.serverURL) in your web browser") } ``` -------------------------------- ### Start GCDWebServer with Custom Options Source: https://context7.com/swisspol/gcdwebserver/llms.txt Starts a GCDWebServer with a dictionary of options for fine-grained control over port, Bonjour, authentication, and connection limits. Requires GCDWebServer import. ```objectivec #import "GCDWebServer.h" GCDWebServer* webServer = [[GCDWebServer alloc] init]; // Configure server with options NSDictionary* options = @{ GCDWebServerOption_Port: @8080, GCDWebServerOption_BonjourName: @"My Web Server", GCDWebServerOption_BonjourType: @"_http._tcp", GCDWebServerOption_MaxPendingConnections: @16, GCDWebServerOption_ServerName: @"MyApp/1.0", GCDWebServerOption_BindToLocalhost: @NO, GCDWebServerOption_AutomaticallyMapHEADToGET: @YES, GCDWebServerOption_ConnectedStateCoalescingInterval: @1.0 }; NSError* error = nil; if (![webServer startWithOptions:options error:&error]) { NSLog(@"Failed to start server: %@", error); } ``` -------------------------------- ### Install GCDWebServer with Carthage Source: https://github.com/swisspol/gcdwebserver/blob/master/README.md Add this line to your Cartfile to install GCDWebServer using Carthage. Note that Carthage support started from version 3.2.5. ```plaintext github "swisspol/GCDWebServer" ~> 3.2.5 ``` -------------------------------- ### Install GCDWebServer with CocoaPods Source: https://github.com/swisspol/gcdwebserver/blob/master/README.md Add this line to your Podfile to install GCDWebServer using CocoaPods. ```ruby pod "GCDWebServer", "~> 3.0" ``` -------------------------------- ### Install GCDWebDAVServer with CocoaPods Source: https://github.com/swisspol/gcdwebserver/blob/master/README.md To use the GCDWebDAVServer extension, specify it in your Podfile. ```ruby pod "GCDWebServer/WebDAV", "~> 3.0" ``` -------------------------------- ### Initialize GCDWebDAVServer in AppDelegate Source: https://github.com/swisspol/gcdwebserver/blob/master/README.md Configures and starts a WebDAV server within an iOS application delegate to serve the documents directory. ```objectivec @interface AppDelegate : NSObjectHello World
"]; }]; // Start server on port 8080 [_webServer startWithPort:8080 bonjourName:nil]; NSLog(@"Visit %@ in your web browser", _webServer.serverURL); return YES; } @end ``` -------------------------------- ### Implement GCDWebServerDelegate in Objective-C Source: https://context7.com/swisspol/gcdwebserver/llms.txt Use the GCDWebServerDelegate protocol to monitor server lifecycle events such as start, stop, and connection status. ```objectivec #import "GCDWebServer.h" @interface MyServerController : NSObject%@
", value]; return [GCDWebServerDataResponse responseWithHTML:html]; }]; ``` -------------------------------- ### Enable HTTP Basic or Digest Authentication Source: https://context7.com/swisspol/gcdwebserver/llms.txt Protect server endpoints with username/password credentials using Basic or Digest authentication. Digest authentication is more secure. This example configures Digest authentication with specified accounts. ```objectivec #import "GCDWebServer.h" #import "GCDWebServerDataResponse.h" GCDWebServer* webServer = [[GCDWebServer alloc] init]; [webServer addDefaultHandlerForMethod:@"GET" requestClass:[GCDWebServerRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) { return [GCDWebServerDataResponse responseWithHTML:@"Protected content
"]; }]; // Start with Digest authentication (more secure than Basic) NSDictionary* options = @{ GCDWebServerOption_Port: @8080, GCDWebServerOption_AuthenticationMethod: GCDWebServerAuthenticationMethod_DigestAccess, GCDWebServerOption_AuthenticationRealm: @"My Server", GCDWebServerOption_AuthenticationAccounts: @{ @"admin": @"secretpassword", @"user": @"userpassword" } }; // For Basic auth (less secure, passwords sent in clear): // GCDWebServerOption_AuthenticationMethod: GCDWebServerAuthenticationMethod_Basic NSError* error = nil; [webServer startWithOptions:options error:&error]; ``` -------------------------------- ### Handle Multipart File Uploads with GCDWebServer Source: https://context7.com/swisspol/gcdwebserver/llms.txt Utilize GCDWebServerMultiPartFormRequest for handling file uploads encoded with multipart/form-data. This example shows serving an upload form and processing the uploaded file and its description. ```objectivec #import "GCDWebServer.h" #import "GCDWebServerDataResponse.h" #import "GCDWebServerMultiPartFormRequest.h" GCDWebServer* webServer = [[GCDWebServer alloc] init]; // Serve upload form [webServer addHandlerForMethod:@"GET" path:@"/upload" requestClass:[GCDWebServerRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) { NSString* html = @"" @""; return [GCDWebServerDataResponse responseWithHTML:html]; }]; // Handle file upload [webServer addHandlerForMethod:@"POST" path:@"/upload" requestClass:[GCDWebServerMultiPartFormRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) { GCDWebServerMultiPartFormRequest* multipartRequest = (GCDWebServerMultiPartFormRequest*)request; // Get form arguments GCDWebServerMultiPartArgument* descArg = [multipartRequest firstArgumentForControlName:@"description"]; NSString* description = descArg.string; // Get uploaded file GCDWebServerMultiPartFile* file = [multipartRequest firstFileForControlName:@"file"]; if (file) { NSString* destPath = [NSTemporaryDirectory() stringByAppendingPathComponent:file.fileName]; [[NSFileManager defaultManager] moveItemAtPath:file.temporaryPath toPath:destPath error:nil]; NSString* html = [NSString stringWithFormat:@"Uploaded %@ (%@)
", file.fileName, description]; return [GCDWebServerDataResponse responseWithHTML:html]; } return [GCDWebServerDataResponse responseWithHTML:@"No file uploaded
"]; }]; [webServer startWithPort:8080 bonjourName:nil]; ``` -------------------------------- ### Return Formatted Error Responses with GCDWebServerErrorResponse Source: https://context7.com/swisspol/gcdwebserver/llms.txt Use GCDWebServerErrorResponse to return properly formatted error responses with HTTP status codes. This example demonstrates returning client errors (BadRequest, NotFound) and server errors (InternalServerError) with underlying error details. ```objectivec #import "GCDWebServer.h" #import "GCDWebServerErrorResponse.h" GCDWebServer* webServer = [[GCDWebServer alloc] init]; [webServer addHandlerForMethod:@"GET" pathRegex:@"/api/resource/([0-9]+)" requestClass:[GCDWebServerRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) { NSArray* captures = [request attributeForKey:GCDWebServerRequestAttribute_RegexCaptures]; NSInteger resourceId = [captures.firstObject integerValue]; // Simulate resource lookup if (resourceId == 0) { return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_BadRequest message:@"Invalid resource ID"]; } if (resourceId > 100) { return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_NotFound message:@"Resource %ld not found", (long)resourceId]; } // Simulate server error NSError* dbError = [NSError errorWithDomain:@"DBError" code:500 userInfo:nil]; if (resourceId == 99) { return [GCDWebServerErrorResponse responseWithServerError:kGCDWebServerHTTPStatusCode_InternalServerError underlyingError:dbError message:@"Database connection failed"]; } return [GCDWebServerDataResponse responseWithJSONObject:@{@"id": @(resourceId)}]; }]; [webServer startWithPort:8080 bonjourName:nil]; ``` -------------------------------- ### Create JSON API Responses with GCDWebServer Source: https://context7.com/swisspol/gcdwebserver/llms.txt Use GCDWebServerDataResponse to return JSON-serialized objects. This handler automatically sets the content-type to application/json. It supports both GET for retrieving data and POST for creating or updating data, including validation for incoming JSON. ```Objective-C #import "GCDWebServer.h" #import "GCDWebServerDataResponse.h" #import "GCDWebServerDataRequest.h" GCDWebServer* webServer = [[GCDWebServer alloc] init]; // GET JSON endpoint [webServer addHandlerForMethod:@"GET" path:@"/api/items" requestClass:[GCDWebServerRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) { NSArray* items = @[ @{@"id": @1, @"name": @"Item 1", @"price": @9.99}, @{@"id": @2, @"name": @"Item 2", @"price": @19.99} ]; GCDWebServerDataResponse* response = [GCDWebServerDataResponse responseWithJSONObject:items]; response.cacheControlMaxAge = 300; // Cache for 5 minutes return response; }]; // POST JSON endpoint - receiving JSON data [webServer addHandlerForMethod:@"POST" path:@"/api/items" requestClass:[GCDWebServerDataRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) { GCDWebServerDataRequest* dataRequest = (GCDWebServerDataRequest*)request; NSDictionary* jsonBody = dataRequest.jsonObject; if (!jsonBody) { return [GCDWebServerDataResponse responseWithJSONObject:@{@"error": @"Invalid JSON"}]; } NSDictionary* result = @{ @"success": @YES, @"created": jsonBody, @"id": @([[NSDate date] timeIntervalSince1970]) }; GCDWebServerDataResponse* response = [GCDWebServerDataResponse responseWithJSONObject:result]; response.statusCode = 201; return response; }]; [webServer startWithPort:8080 bonjourName:nil]; ``` -------------------------------- ### Serve a static directory with GCDWebServer Source: https://github.com/swisspol/gcdwebserver/blob/master/README.md Demonstrates setting up a command-line tool to serve the home directory over HTTP on port 8080. ```objectivec #import "GCDWebServer.h" int main(int argc, const char* argv[]) { @autoreleasepool { GCDWebServer* webServer = [[GCDWebServer alloc] init]; [webServer addGETHandlerForBasePath:@"/" directoryPath:NSHomeDirectory() indexFilename:nil cacheAge:3600 allowRangeRequests:YES]; [webServer runWithPort:8080]; } return 0; } ``` -------------------------------- ### Configure Dynamic HTML Templates and Static File Handlers Source: https://github.com/swisspol/gcdwebserver/blob/master/README.md Sets up a web server to serve static files from a directory and uses a custom handler to process .html files with variable substitution. Includes a redirect handler for the root path. ```objectivec // Get the path to the website directory NSString* websitePath = [[NSBundle mainBundle] pathForResource:@"Website" ofType:nil]; // Add a default handler to serve static files (i.e. anything other than HTML files) [self addGETHandlerForBasePath:@"/" directoryPath:websitePath indexFilename:nil cacheAge:3600 allowRangeRequests:YES]; // Add an override handler for all requests to "*.html" URLs to do the special HTML templatization [self addHandlerForMethod:@"GET" pathRegex:@"/.*\.html" requestClass:[GCDWebServerRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) { NSDictionary* variables = [NSDictionary dictionaryWithObjectsAndKeys:@"value", @"variable", nil]; return [GCDWebServerDataResponse responseWithHTMLTemplate:[websitePath stringByAppendingPathComponent:request.path] variables:variables]; }]; // Add an override handler to redirect "/" URL to "/index.html" [self addHandlerForMethod:@"GET" path:@"/" requestClass:[GCDWebServerRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) { return [GCDWebServerResponse responseWithRedirect:[NSURL URLWithString:@"index.html" relativeToURL:request.URL] permanent:NO]; ]; ``` -------------------------------- ### Initialize GCDWebDAVServer Source: https://context7.com/swisspol/gcdwebserver/llms.txt Sets up a class 1 compliant WebDAV server for external client access. ```objectivec #import "GCDWebDAVServer.h" @interface AppDelegate ()Hello World
"]; }]; // Serve static files from home directory [webServer addGETHandlerForBasePath:@"/files/" directoryPath:NSHomeDirectory() indexFilename:nil cacheAge:3600 allowRangeRequests:YES]; // Run synchronously until Ctrl-C [webServer runWithPort:8080 bonjourName:nil]; NSLog(@"Server was running at %@", webServer.serverURL); } return 0; } ``` -------------------------------- ### Initialize GCDWebUploader Source: https://context7.com/swisspol/gcdwebserver/llms.txt Configures a browser-based file manager with custom UI elements and file extension restrictions. ```objectivec #import "GCDWebUploader.h" @interface AppDelegate ()Upload and download files from your device
"; self.webUploader.footer = @"MyApp v1.0"; self.webUploader.allowedFileExtensions = @[@"pdf", @"jpg", @"png", @"txt"]; self.webUploader.allowHiddenItems = NO; [self.webUploader start]; NSLog(@"Visit %@ in your web browser", self.webUploader.serverURL); return YES; } // Delegate methods - (void)webUploader:(GCDWebUploader*)uploader didUploadFileAtPath:(NSString*)path { NSLog(@"File uploaded: %@", path); } - (void)webUploader:(GCDWebUploader*)uploader didDownloadFileAtPath:(NSString*)path { NSLog(@"File downloaded: %@", path); } - (void)webUploader:(GCDWebUploader*)uploader didDeleteItemAtPath:(NSString*)path { NSLog(@"Item deleted: %@", path); } @end ``` -------------------------------- ### macOS Command Line HTTP Server Source: https://github.com/swisspol/gcdwebserver/blob/master/README.md Implement a basic HTTP server on macOS that responds with 'Hello World'. Ensure the libz shared system library is added to your Xcode target if not using CocoaPods. ```Objective-C #import "GCDWebServer.h" #import "GCDWebServerDataResponse.h" int main(int argc, const char* argv[]) { @autoreleasepool { // Create server GCDWebServer* webServer = [[GCDWebServer alloc] init]; // Add a handler to respond to GET requests on any URL [webServer addDefaultHandlerForMethod:@"GET" requestClass:[GCDWebServerRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) { return [GCDWebServerDataResponse responseWithHTML:@"Hello World
"]; }]; // Use convenience method that runs server on port 8080 // until SIGINT (Ctrl-C in Terminal) or SIGTERM is received [webServer runWithPort:8080 bonjourName:nil]; NSLog(@"Visit %@ in your web browser", webServer.serverURL); } return 0; } ``` -------------------------------- ### Create HTTP Redirects Source: https://context7.com/swisspol/gcdwebserver/llms.txt Implement permanent (301) or temporary (302) redirects using the responseWithRedirect convenience method. ```objectivec #import "GCDWebServer.h" #import "GCDWebServerResponse.h" GCDWebServer* webServer = [[GCDWebServer alloc] init]; // Permanent redirect (301) [webServer addHandlerForMethod:@"GET" path:@"/old-page" requestClass:[GCDWebServerRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) { NSURL* newURL = [NSURL URLWithString:@"/new-page" relativeToURL:request.URL]; return [GCDWebServerResponse responseWithRedirect:newURL permanent:YES]; }]; // Temporary redirect (302) [webServer addHandlerForMethod:@"GET" path:@"/" requestClass:[GCDWebServerRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) { return [GCDWebServerResponse responseWithRedirect:[NSURL URLWithString:@"index.html" relativeToURL:request.URL] permanent:NO]; }]; [webServer startWithPort:8080 bonjourName:nil]; ``` -------------------------------- ### Generate Dynamic HTML with Template Responses Source: https://context7.com/swisspol/gcdwebserver/llms.txt Use HTML templates with variable substitution for dynamic page generation. This snippet shows how to load an HTML template and populate it with provided variables. ```objectivec #import "GCDWebServer.h" #import "GCDWebServerDataResponse.h" GCDWebServer* webServer = [[GCDWebServer alloc] init]; // Assuming template.html contains:%content%
[webServer addHandlerForMethod:@"GET" pathRegex:@"/page/.*\.html" requestClass:[GCDWebServerRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) { NSString* templatePath = [[NSBundle mainBundle] pathForResource:@"template" ofType:@"html"]; NSDictionary* variables = @{ @"title": @"Welcome", @"content": @"This content was dynamically inserted!" }; return [GCDWebServerDataResponse responseWithHTMLTemplate:templatePath variables:variables]; }]; [webServer startWithPort:8080 bonjourName:nil]; ``` -------------------------------- ### Serve Static Files and Directories with GCDWebServer Source: https://context7.com/swisspol/gcdwebserver/llms.txt GCDWebServer can serve files from disk with automatic MIME type detection, caching, and range request support. This includes serving an entire directory, a specific file, or static data directly. ```Objective-C #import "GCDWebServer.h" #import "GCDWebServerFileResponse.h" GCDWebServer* webServer = [[GCDWebServer alloc] init]; // Serve a static directory (e.g., website root) NSString* websitePath = [[NSBundle mainBundle] pathForResource:@"Website" ofType:nil]; [webServer addGETHandlerForBasePath:@"/" directoryPath:websitePath indexFilename:@"index.html" cacheAge:3600 allowRangeRequests:YES]; // Serve a specific file [webServer addGETHandlerForPath:@"/download/manual.pdf" filePath:@"/path/to/manual.pdf" isAttachment:YES // Forces download instead of inline display cacheAge:86400 allowRangeRequests:YES]; // Serve static data (e.g., generated content) NSData* staticData = [@"Static content" dataUsingEncoding:NSUTF8StringEncoding]; [webServer addGETHandlerForPath:@"/static.txt" staticData:staticData contentType:@"text/plain" cacheAge:3600]; [webServer startWithPort:8080 bonjourName:nil]; ``` -------------------------------- ### Integrate GCDWebServer with Swift Source: https://context7.com/swisspol/gcdwebserver/llms.txt Configure GCDWebServer in Swift using a bridging header to expose the Objective-C API. ```swift import Foundation // Bridging-Header.h should contain: // #importHello from Swift!
") } webServer.addHandler(forMethod: "GET", path: "/api/data", request: GCDWebServerRequest.self) { request in let data: [String: Any] = ["message": "Hello", "timestamp": Date().timeIntervalSince1970] return GCDWebServerDataResponse(jsonObject: data) } webServer.start(withPort: 8080, bonjourName: "Swift Server") print("Visit \(webServer.serverURL!) in your web browser") } func stopServer() { webServer.stop() } } ``` -------------------------------- ### Add Path-Specific Handlers to GCDWebServer Source: https://context7.com/swisspol/gcdwebserver/llms.txt Adds handlers for specific HTTP methods and URL paths, including exact paths and regex patterns. Handlers are processed in LIFO order. Requires GCDWebServer and GCDWebServerDataResponse imports. ```objectivec #import "GCDWebServer.h" #import "GCDWebServerDataResponse.h" GCDWebServer* webServer = [[GCDWebServer alloc] init]; // Handle GET requests to exact path "/api/status" [webServer addHandlerForMethod:@"GET" path:@"/api/status" requestClass:[GCDWebServerRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) { NSDictionary* status = @{@"status": @"ok", @"version": @"1.0"}; return [GCDWebServerDataResponse responseWithJSONObject:status]; }]; // Handle GET requests matching a regex pattern [webServer addHandlerForMethod:@"GET" pathRegex:@"/users/([0-9]+)" requestClass:[GCDWebServerRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) { // Access regex captures from request attributes NSArray* captures = [request attributeForKey:GCDWebServerRequestAttribute_RegexCaptures]; NSString* userId = captures.firstObject; NSDictionary* user = @{@"id": userId, @"name": @"John Doe"}; return [GCDWebServerDataResponse responseWithJSONObject:user]; }]; [webServer startWithPort:8080 bonjourName:nil]; ``` -------------------------------- ### Implement HTTP Redirects with GCDWebServer Source: https://github.com/swisspol/gcdwebserver/blob/master/README.md Uses the convenience method on GCDWebServerResponse to automatically set the HTTP status code and Location header for a redirect. ```objectivec [self addHandlerForMethod:@"GET" path:@"/" requestClass:[GCDWebServerRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) { return [GCDWebServerResponse responseWithRedirect:[NSURL URLWithString:@"index.html" relativeToURL:request.URL] permanent:NO]; }]; ``` -------------------------------- ### iOS WebDAV Server Source: https://github.com/swisspol/gcdwebserver/blob/master/README.md Set up a WebDAV server in an iOS app using GCDWebDAVServer. This enables file management via WebDAV clients. ```Objective-C #import "GCDWebDAVServer.h" ``` -------------------------------- ### Serve Files with Byte Range Support using GCDWebServerFileResponse Source: https://context7.com/swisspol/gcdwebserver/llms.txt Use GCDWebServerFileResponse to serve large files efficiently, supporting partial content requests (HTTP 206) and enabling resumable downloads. This handler checks for byte range requests and serves the appropriate portion of the file. ```Objective-C #import "GCDWebServer.h" #import "GCDWebServerFileResponse.h" GCDWebServer* webServer = [[GCDWebServer alloc] init]; [webServer addHandlerForMethod:@"GET" pathRegex:@"/videos/.*" requestClass:[GCDWebServerRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) { NSString* videoPath = [NSString stringWithFormat:@"/path/to/videos%@", request.path]; // Check if client requested a specific byte range if ([request hasByteRange]) { // Return partial content with the requested range GCDWebServerFileResponse* response = [GCDWebServerFileResponse responseWithFile:videoPath byteRange:request.byteRange]; if (response) { return response; } } // Return full file GCDWebServerFileResponse* response = [GCDWebServerFileResponse responseWithFile:videoPath]; return response ?: [GCDWebServerResponse responseWithStatusCode:404]; }]; [webServer startWithPort:8080 bonjourName:nil]; ``` -------------------------------- ### Handle HTTP Requests Asynchronously in GCDWebServer Source: https://github.com/swisspol/gcdwebserver/blob/master/README.md Use an asyncProcessBlock to return immediately and provide the response via a completion block once processing is finished. ```objectivec [webServer addDefaultHandlerForMethod:@"GET" requestClass:[GCDWebServerRequest class] asyncProcessBlock:^(GCDWebServerRequest* request, GCDWebServerCompletionBlock completionBlock) { // Do some async operation like network access or file I/O (simulated here using dispatch_after()) dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ GCDWebServerDataResponse* response = [GCDWebServerDataResponse responseWithHTML:@"Hello World
"]; completionBlock(response); }); }]; ``` -------------------------------- ### Handle HTTP Requests Synchronously in GCDWebServer Source: https://github.com/swisspol/gcdwebserver/blob/master/README.md Use a standard process block to generate a response while the handler blocks execution. ```objectivec [webServer addDefaultHandlerForMethod:@"GET" requestClass:[GCDWebServerRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) { GCDWebServerDataResponse* response = [GCDWebServerDataResponse responseWithHTML:@"Hello World
"]; return response; }]; ``` -------------------------------- ### Render File Management Table Row Source: https://github.com/swisspol/gcdwebserver/blob/master/GCDWebUploader/GCDWebUploader.bundle/Contents/Resources/index.html Renders a table row for a file or folder, including action buttons for download, open, move, and delete. ```html{%=o.name%}
{%=formatFileSize(o.size)%}
{% } %}{%=o.path%}
\n", @"Hello World!\n", @"
\n", nil]; // Fake data source we are reading from GCDWebServerStreamedResponse* response = [GCDWebServerStreamedResponse responseWithContentType:@"text/html" asyncStreamBlock:^(GCDWebServerBodyReaderCompletionBlock completionBlock) { // Simulate a delay reading from the fake data source dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSString* string = contents.firstObject; if (string) { [contents removeObjectAtIndex:0]; completionBlock([string dataUsingEncoding:NSUTF8StringEncoding], nil); // Generate the 2nd part of the stream data } else { completionBlock([NSData data], nil); // Must pass an empty NSData to signal the end of the stream } }); }]; return response; }]; ``` -------------------------------- ### Handle URL-encoded Form Submissions with GCDWebServer Source: https://context7.com/swisspol/gcdwebserver/llms.txt Use GCDWebServerURLEncodedFormRequest to automatically parse URL-encoded form data from POST requests. This snippet demonstrates serving an HTML form and processing its submission. ```objectivec #import "GCDWebServer.h" #import "GCDWebServerDataResponse.h" #import "GCDWebServerURLEncodedFormRequest.h" GCDWebServer* webServer = [[GCDWebServer alloc] init]; // Serve the HTML form [webServer addHandlerForMethod:@"GET" path:@"/" requestClass:[GCDWebServerRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) { NSString* html = @"" @""; return [GCDWebServerDataResponse responseWithHTML:html]; }]; // Handle form submission [webServer addHandlerForMethod:@"POST" path:@"/" requestClass:[GCDWebServerURLEncodedFormRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) { GCDWebServerURLEncodedFormRequest* formRequest = (GCDWebServerURLEncodedFormRequest*)request; NSString* name = formRequest.arguments[@"name"]; NSString* email = formRequest.arguments[@"email"]; NSString* html = [NSString stringWithFormat:@"Hello %@ (%@)
", name, email]; return [GCDWebServerDataResponse responseWithHTML:html]; }]; [webServer startWithPort:8080 bonjourName:nil]; ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.