如何使用 GCDWebServer 请求读取 POST 请求的正文

Posted

技术标签:

【中文标题】如何使用 GCDWebServer 请求读取 POST 请求的正文【英文标题】:How to read body of a POST request with GCDWebServerRequest 【发布时间】:2018-01-17 07:41:31 【问题描述】:

我有以下处理程序来响应 POST 请求:

[_webServer addHandlerForMethod:@"POST"
                           path:@"/"
                   requestClass:[GCDWebServerURLEncodedFormRequest class]
                   processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) 

                       NSString* value = [[(GCDWebServerURLEncodedFormRequest*)request arguments] objectForKey:@"value"];
                       NSString* html = [NSString stringWithFormat:@"<html><body><p>%@</p></body></html>", value];
                       return [GCDWebServerDataResponse responseWithHTML:html];

                   ];

当处理程序被触发时,NSString* value 一直给我 null。我能够调试和查看GCDWebServerRequest 对象(屏幕截图)。

我希望获得一个字段_data

我可以知道该怎么做吗?

这是我的 POST 请求以供参考:

 var request = require('request');
 request(
    url: 'http://XX.XX.XX.XX:8080',
    method: 'POST',
    headers:
        'Content-Type': 'application/x-www-form-urlencoded',
    ,
    body: "12345678"
 , function(error, response, body)
    console.log(body);
 );

我正在使用npm request 来运行 POST 请求。如果我为我的 POST 请求做了value=test,它会给我这个错误:

【问题讨论】:

【参考方案1】:

对于 NPM request,如果您希望使用 x-www-form-urlencoded 的内容类型,则必须调用参数 form 而不是 body

例子:

request.post('http://service.com/upload', form:key:'value')

【讨论】:

【参考方案2】:

您的 GCDWebServer 代码是正确的,但您生成的 POST 请求不正确。正文必须包含格式化为 URL 编码形式的数据,例如value=test.

【讨论】:

我正在为 androidios 开发。发布请求虽然适用于android。我尝试更改为value=test,但它给了我语法错误。我已经编辑了我的帖子【参考方案3】:

您可以继承 GCDWebServerRequestoverride func write(_ data: Data) 来访问正文(例如,用于调试此类问题)。只需在addHandlerForMethod 中将requestClass 设置为MyCustomPostRequest.self

【讨论】:

以上是关于如何使用 GCDWebServer 请求读取 POST 请求的正文的主要内容,如果未能解决你的问题,请参考以下文章

需要帮助使用 GCDWebServerDataRequest 实现 GCDWebServer

GCDWebServer 如何在请求中添加自定义参数(GET/POST)

如何从 iOS 应用程序内将 GCDWebServer 请求重定向到外部主机

GCDWebServer:如何更改服务器上的文件权限以进行 WebDAV 操作? (iOS)

GCDWebServer 运行 -addHandlerForMethod:两次不同路径,第二次请求失败?

从 GCDWebServer 请求处理程序访问可变数据