项目场景:
Cocos 编译native代码的时候,用cocos自带的xhr对象发送post请求一直不成功
问题描述:
编译的Web代码是可以直接请求的,一点问题没有,用postman请求也没问题。一开始一直报错,报的是调用C# 的lib文件的时候,在一段请求method判断的地方报了个错,没有具体原因, 报错如下
E/assert: function:open line:274
另外一个问题是,解决了之前报错后一直无法请求通
function httpPostCall(requsetUrl: string, requestData: any, requestHeaderList: Array<{ key: string, value: string }>, callback) {
let request = new XMLHttpRequest();
console.log("Status: Send Post Request to " + requsetUrl);
try {
request.onreadystatechange = function () {
try{
let response = null;
if (request.readyState == 4 && (request.status >= 200 && request.status <= 400)) {
let httpStatus = request.statusText;
response = JSON.parse(request.responseText);
callback(true, response);
} else {
callback(false, response);
}
}catch(e){
cc.error(e)
}
};
request.open("POST", requsetUrl, true);
//add token
setHeaders(requestHeaderList, request);
request.send(JSON.stringify(requestData));
} catch (e) {
cc.error("Send Get Request error: ", e)
}
}
原因分析:
第一个问题指向了一个具体文件的274行,看了下是对请求method做了判断,以为安卓对代码做了处理不允许https,但是发现自己该加的都加了。emmmm仔细看了下代码,发现从别的地方copy来的method居然是Post,C#代码里只对post和POST做了判断。。。web可能因为原生支持xhr所以是另外的代码,没有影响
第二个问题,代码是用的同一套,为什么web是好的,安卓就有问题呢?安卓这边还不能调试,直接打各种log,发现是401错误,同样的请求在web上就是好的,不解,只能老老实实在本地起一个服务debug。用的spring security发现有filter处理的时候body一直是null的,emmmm就很奇怪,因为这个path是直接filter接住的,没有进controller,调试半天决定调一个正常controller试一试,发现http 415报错,好嘛,之前一直报错401,正常的controller才报错415,在header里把
"Content-Type","application/json"
加上,终于好了。。。平时我默认认为请求都是json格式的,又学到了