求救 XMLHttpRequest 如何才能忽略掉https的安全证书

  • Creator 版本:1.9.1

  • 目标平台: Web / iOS / Android / 模拟器

项目中需要用到http请求传输一点数据,用了creator中的XMLHttpRequest,为了安全性,需要请求的是https的网站,遇到安全证书的问题,服务器的证书应该是自签名的
发送到http://…的请求都没有问题,但是发送到https://…就没法发送,有没有大神能给一个绕过安全证书的办法?

消息头你是怎么设置的?应该是和消息头的参数有关系。。

没设置消息头,只设置了一些必要的参数

//发送http请求
    public SendAHttpRequest(url: string,
        form: Form = null,
        okCallback: Function = null,
        errorCallback: Function = null,
        failCallback: Function = null,
        timeoutCallback: Function = null,
        time: number = 1,
        timeout: number = GameConfig.httpRequestTimeOut)
    {
        let xhr: XMLHttpRequest = cc.loader.getXMLHttpRequest();
        xhr.timeout = timeout;

        xhr.onreadystatechange = function ()
        {
            if (xhr.readyState == 4 && (xhr.status >= 200 && xhr.status < 400)) {
                var response = xhr.responseText;
                console.log(response);
                let json = JSON.parse(response);
                if (json.status == "ok") {
                    if (okCallback) {
                        okCallback(json.msg, json.result)
                    }
                }
                else if (json.status == "error") {
                    if (errorCallback) {
                        errorCallback(json.msg, json.result);
                    }
                }
            }
        }



        //出错
        xhr.onerror = function (error)
        {
            if (failCallback) {
                failCallback(error);
            }
        }

        //超时
        if (timeoutCallback) {
            xhr.ontimeout = function(){timeoutCallback();}
        }
        else 
        {
            xhr.ontimeout = function ()
            {
                if (time < GameConfig.httpRequestTryTime) {
                    //重新发一次请求
                    HttpRequest.GetInstance().SendAHttpRequest(url, form, okCallback, errorCallback, failCallback, timeoutCallback,time + 1, timeout);
                }
                else {
                    //弹出网络问题提示框
                }
            }
        }

        let p: string = "";
        if (form) {
            p = form.ToRequestPrama();
        }

        xhr.open("GET", url + p);
        xhr.send(null);

    }

这个 let p: string = “”;
if (form) {
p = form.ToRequestPrama();
}
仅仅是在url后面加一些需要的参数

好像 服务器端须设置设置response’Access-Control-Allow-Origin’才行.

你说的这个应该是跨域的问题,跨域方面没有问题,服务器设置过了
现在问题是 https 安全证书的问题,因为证书不被信任,之前在用unity的时候,是可以重写一个证书处理的函数,来处理证书问题的,但是现在creator里面不知道哪里弄

手工置顶

再手工置顶一次

请问这个问题解决了吗 麻烦分享一下解决方法吧 谢谢

有结果了吗?同问

服务器的证书应该是自签名的

可以提供一个公开可用的URL吗? 可以通过浏览器简单验证你们证书的有效性。 @zhangzhengbo

试了一下, 你们的证书和访问的域名不符, 域名和证书要匹配。

可以试下不使用IP, 改成这个相应的域名。

@zhangzhengbo

可以参考 https://github.com/loopj/android-async-http/blob/606130a196c3c8d3502a6203b44ba74215588adc/library/src/main/java/com/loopj/android/http/AsyncHttpClient.java#L297-L302https://stackoverflow.com/questions/34136694/android-ignore-self-signed-certificate , 在Cocos2dxHttpURLConnection.java 作类似的修改. downloader和xmlhttprequest的实现不同, downloader 已经通过参数设置已经忽略了证书错误。 XMLHTTPRequest通过类似的修改也可以忽略证书错误。

就是没有域名,证书也是自己生成的,自己用浏览器访问就必须要手动点信任才可以

好的,多谢多谢,我去研究一下

求webSocket ssl 修改引擎忽略证书的方法