在我的一个项目中,我在运行 ReactApp 的 Netbeans 应用程序中使用 JxBrowser。 我想从 ReactApp 发送一个 post 请求,并在 JxBrowser 中的自定义协议(protocol)处理程序中拦截它。 该请求是通过“superagent”完成的:
request
.post('http://my-url')
.send({test: 'it'})
.set('Accept', 'application/json')
.set('Content-Type', 'application/json')
.end(callback)
我在 ProtocolHandler 中收到请求,但我不知道如何从请求中获取帖子正文。
urlRequest.getUploadData() //<-- returns null
在此处获取帖子正文的正确方法是什么?
请您参考如下方法:
您正在发出跨域请求。在这种情况下会发送预检“OPTIONS”请求,您需要在 ProtocolHandler 中正确处理它。在这种特殊情况下,您应该设置某些 header ,告诉浏览器允许请求的功能:
if (request.getMethod().equals("OPTIONS")) {
URLResponse urlResponse = new URLResponse();
String origin = request.getRequestHeaders().getHeader("Origin");
HttpHeadersEx headers = urlResponse.getHeaders();
headers.setHeader("Access-Control-Allow-Methods", "POST");
headers.setHeader("Access-Control-Allow-Headers", "Content-Type");
headers.setHeader("Access-Control-Allow-Origin", origin);
urlResponse.setStatus(HttpStatus.OK);
return urlResponse;
}
此外,为了让 JxBrowser 能够正确检测 POST 数据类型,您应该为“Content-Type”请求头设置相应的值。在本例中,它应该是“application/x-www-form-urlencoded”。
request
.post('http://my-url')
.send({test: 'it'})
.set('Accept', 'application/json')
.set('Content-Type', 'application/x-www-form-urlencoded')
.end(callback)
然后您将收到包含您的数据的 POST 请求。我建议您查看以下文章,其中包含与 CORS 相关的详细信息:https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
如果您向同源发出请求,只需设置正确的“Content-Type” header 即可避免处理跨源请求。