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

How to read body of a POST request with GCDWebServerRequest

我有以下处理程序来响应 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,它会给我这个错误:

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

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

示例:

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

您可以子类化 GCDWebServerRequestoverride func write(_ data: Data) 来访问正文(例如用于调试此类问题)。只需在 addHandlerForMethod.

中将 requestClass 设置为 MyCustomPostRequest.self