qml中用xmlhttprequest对某个网页发get请求,status=0,resText 中显示AccessDenied,并且已经设置setRequestHeader("Access-Control-Allow-Origin","*"),怎么办
时间: 2024-04-03 21:33:34 浏览: 105
Nginx配置跨域请求Access-Control-Allow-Origin * 详解
在QML中使用XMLHttpRequest对象进行跨域请求时,由于QML本身是通过Qt的网络库进行网络请求的,所以XMLHttpRequest对象的跨域请求依然会受到Qt的同源策略的限制,setRequestHeader("Access-Control-Allow-Origin","*")并不能解决这个问题。
解决这个问题的方法是通过设置QNetworkRequest对象的属性来实现跨域请求。具体步骤如下:
1. 创建一个QNetworkAccessManager对象。
```
var manager = new QtNetwork.QNetworkAccessManager();
```
2. 创建一个QNetworkRequest对象,指定请求的URL。
```
var url = new QUrl("http://example.com");
var request = new QtNetwork.QNetworkRequest(url);
```
3. 设置请求的Header,包括User-Agent、Referer等信息。
```
request.setHeader(QtNetwork.QNetworkRequest.ContentTypeHeader, "application/x-www-form-urlencoded");
request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3");
request.setRawHeader("Referer", "http://example.com");
```
4. 发送请求。
```
manager.get(request);
```
5. 监听请求完成的信号,并读取响应数据。
```
manager.finished.connect(function(reply) {
if (reply.error == QtNetwork.QNetworkReply.NoError) {
console.log(reply.readAll());
}
});
```
这样就可以实现跨域请求并获取响应数据了。
阅读全文