【问题标题】:How to read form body of a GCDWebServer POST request如何读取 GCDWebServer POST 请求的表单正文
【发布时间】:2020-05-16 10:15:54
【问题描述】:

我很难相信这是如此困难,但在花了几个小时试图弄清楚之后,我在这里向蜂巢思维寻求帮助!

我的问题与this 非常相似,但是其中的答案对我没有帮助,因为我的表单中没有键。我基本上想将文本 .plist 文件从 PC 发送到我的应用程序。页面上的 HTML 是这样的 ..

<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" id="config" name="config" accept=".plist" size=40>
<input type="submit"> 
</form>

这给出了一个非常简单的表单,带有一个选择文件按钮和一个提交按钮。我已向 Wireshark 确认该文件已附加到表单,并且该文件已发布到我的应用程序中的 GCDWebServer。当文件上传由网络服务器处理时,我还可以看到以下确认正文数据:

[DEBUG] 套接字 21 预检请求“POST /upload”上的连接,正文长度为 2045 字节

[DEBUG] 套接字 21 上的连接处理请求“POST /upload”,正文为 2045 字节

我处理文件的 POST 方法是这样的:

    [_webServer addHandlerForMethod:@"POST"
                          path:@"/upload"
                  requestClass:[GCDWebServerRequest class]
                   processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) {
    
        NSString    *type = [(GCDWebServerRequest*)request contentType];
        NSInteger  length = [(GCDWebServerRequest*)request contentLength];
        BOOL      hasBody = [(GCDWebServerRequest*)request hasBody];
    
    NSString *description = [(GCDWebServerURLEncodedFormRequest*)request description];
    
    NSLog(@"\r\nType: %@\nLength: %lu\nHas Body: %@\nHeaders: %@\nConfig: %@", type, length, hasBody?@"YES":@"NO", description, @"");
    
        return [GCDWebServerDataResponse responseWithHTML:@"TODO UPLOADED CONFIRMATION"];
    }];

我可以获得内容类型、内容长度、附有正文的布尔确认、所有标题和边界描述等。但我一生无法弄清楚如何获得实际的正文内容。我不希望将其保存为文件,我只想将其作为 NSString 进行解析,然后将设置保存在我的应用程序中。

我尝试过的一些事情:

//NSData     *data = [(GCDWebServerRequest*)request data];
//NSString *config = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];

//NSString *config = [(GCDWebServerMultiPartFormRequest*)request files];
//NSString *config = [[(GCDWebServerURLEncodedFormRequest*)request arguments] objectForKey:@"filename"];

在我看来,NSData 最有可能,但调用它时应用程序崩溃。如果有人知道我如何访问此发布内容的正文,我将不胜感激!

提前致谢!

等离子

【问题讨论】:

    标签: ios objective-c post nsdata gcdwebserver


    【解决方案1】:

    您需要使用GCDWebServerMultiPartFormRequesthttps://github.com/swisspol/GCDWebServer/blob/master/Mac/main.m#L257 有一个例子。

    【讨论】:

    • 非常感谢,我没有考虑查看 Mac 示例!我现在有了要操作的文件内容! :)
    猜你喜欢
    • 1970-01-01
    • 2017-10-14
    • 2023-04-07
    • 2014-11-29
    • 2018-07-06
    • 2021-03-28
    • 2019-11-30
    • 1970-01-01
    • 2021-12-04
    相关资源
    最近更新 更多