在我的一个项目中,我在运行 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 即可避免处理跨源请求。


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!