0

我有以下处理程序来响应 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 请求。如果我value=test为我的 POST 请求做了,它会给我这个错误:

在此处输入图像描述

4

3 回答 3

0

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

于 2018-01-17T14:32:03.760 回答
0

您可以子类化GCDWebServerRequestoverride func write(_ data: Data)访问主体(例如,用于调试此类问题)。只需设置requestClassMyCustomPostRequest.selfin addHandlerForMethod

于 2018-03-13T16:29:06.127 回答
0

对于 NPM request,如果您希望使用 content-type of x-www-form-urlencoded,则必须调用参数form而不是body

例子:

request.post('http://service.com/upload', {form:{key:'value'}})
于 2018-01-18T00:44:47.017 回答