我有以下处理程序来响应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
,它会给我这个错误:
答案 0 :(得分:0)
您的GCDWebServer代码是正确的,但您生成的POST请求不是。正文必须包含格式化为URL编码形式的数据,例如value=test
。
答案 1 :(得分:0)
对于NPM request
,如果您希望使用x-www-form-urlencoded
的内容类型,则必须调用参数form
而不是body
。
示例:
request.post('http://service.com/upload', {form:{key:'value'}})
答案 2 :(得分:0)
您可以将GCDWebServerRequest
和override func write(_ data: Data)
子类化以访问正文(例如,用于调试此类问题)。只需在requestClass
中将MyCustomPostRequest.self
设置为addHandlerForMethod
。