如何使用 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
.
【讨论】:
我正在为 android 和 ios 开发。发布请求虽然适用于android。我尝试更改为value=test
,但它给了我语法错误。我已经编辑了我的帖子【参考方案3】:
您可以继承 GCDWebServerRequest
和 override func write(_ data: Data)
来访问正文(例如,用于调试此类问题)。只需在addHandlerForMethod
中将requestClass
设置为MyCustomPostRequest.self
。
【讨论】:
以上是关于如何使用 GCDWebServer 请求读取 POST 请求的正文的主要内容,如果未能解决你的问题,请参考以下文章
需要帮助使用 GCDWebServerDataRequest 实现 GCDWebServer
GCDWebServer 如何在请求中添加自定义参数(GET/POST)
如何从 iOS 应用程序内将 GCDWebServer 请求重定向到外部主机
GCDWebServer:如何更改服务器上的文件权限以进行 WebDAV 操作? (iOS)