uni-app 网络请求问题:web端正常,app端部分机型返回html标签内容,疑似检测信息

uni-app 网络请求问题:web端正常,app端部分机型返回html标签内容,疑似检测信息

操作步骤:

  • 小米max2,请求接口,就会返回上述奇怪的代码

预期结果:

  • 应该和web端一样返回正常的请求数据

实际结果:

{  
    "data": "<!DOCTYPE html>\n<html>\n<head>\n<meta id=\"viewport\" name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0\" />\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n</head>\n<body>\n<script type=\"text/javascript\">\n//获取url参数\nfunction getUrlParam(name) {\n    var reg = new RegExp(\"(^|&)\" + name + \"=([^&]*)(&|$)\", \"i\"),\n        r = decodeURIComponent(window.location.search).substr(1).match(reg);\n    return r!=null ? decodeURI(r[2]) : null;\n}\n\n(function(){\n\tvar ratio = window.devicePixelRatio || 1;\n\tvar UA = String(navigator.userAgent).toLowerCase();\n\t//alert(navigator.userAgent)\n\t//var hasTouch = document.documentElement.ontouchstart !== undefined;\n\tvar isMobile = UA.indexOf('mobile') > -1;\n\t//var isAndroid = UA.indexOf('android') > -1;\n\tvar isIPad = UA.indexOf('ipad') > -1;\n\t//var isIPhone = UA.indexOf('iphone') > -1;\n\t//此方法误判很严重\n\t//var isBigScreen = Math.min(screen.height/ratio,screen.width/ratio) > 600;\n\t//针对点一点扫一扫,跳转结果界面\n\tvar g_type = getUrlParam(\"type\");\n\tvar g_tips = getUrlParam(\"tips\");\n\tvar tabs = getUrlParam(\"tabs\");\n\tvar sms = getUrlParam(\"sms\");\n\t\n\t//检测平台\n\tvar p = String(navigator.platform.toLowerCase()),\n\t\tisWin = p.indexOf(\"win\") == 0,  \n\t\tisMac = p.indexOf(\"mac\") == 0, \n\t\tisX11 = (p == \"x11\") || (p.indexOf(\"linux\") == 0);  \n\t\t\n\tvar template = getUrlParam(\"template\") || \"default\";\n\tvar $href = '';\n\t//1、not mobile //pc\n\t//2、mobile but ipad\n\t//3、big screen //android pad\n\t//4、检测平台\n\tif((isMobile && !isIPad)||!(isWin||isMac||isX11||isIPad)){\n\t\t$href = \"mobile.html\";\n\t\tif(tabs == \"wx\"){\n\t\t\tif (sms != 1){\n\t\t\t\tif(g_type==\"logout\") {\n\t\t\t\t\tlocation.href = template+\"/result.html?type=success\";\n\t\t\t\t\treturn;\n\t\t\t\t} else if(g_type==\"authfailed\") {\n\t\t\t\t\tlocation.href = template+\"/result.html?type=failure&g_tips=\"+g_tips;\n\t\t\t\t\treturn;\n\t\t\t\t} else if(g_type==\"authalready\") {\n\t\t\t\t\tlocation.href = template+\"/result.html?type=warn&g_tips=\"+g_tips;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t$href = \"mobile_sms.html\";\n\t\t\t\tlocation.href = template+\"/\"+$href+location.search;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\t\t\n\t}else{\n\t\t$href = \"pc.html\";\n\t}\t\n\tlocation.href = template+\"/\"+$href+location.search;\n})();\n</script>\n</body>\n</html>\n\n",  
    "statusCode": 200,  
    "header": {  
        "Set-Cookie": "AUTHSESSID=8f94d30c53c5; HttpOnly;Secure;",  
        "Content-Length": "2250",  
        "Connection": "keep-alive",  
        "X-Frame-Options": "SAMEORIGIN",  
        "Content-Type": "text/html",  
        "Date": "Thu, 06 May 2021 08:08:00 GMT"  
    },  
    "errMsg": "request:ok",  
    "cookies": ["AUTHSESSID=8f94d30c53c5; HttpOnly;Secure;"]  
}

bug描述:

  • 正常请求一个地址,网页端正常,手机端新机型正常,小米max2 在本地调试的时候,post请求会返回一串奇怪的内容
{  
    "data": "<!DOCTYPE html>\n<html>\n<head>\n<meta id=\"viewport\" name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0\" />\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n</head>\n<body>\n<script type=\"text/javascript\">\n//获取url参数\nfunction getUrlParam(name) {\n    var reg = new RegExp(\"(^|&)\" + name + \"=([^&]*)(&|$)\", \"i\"),\n        r = decodeURIComponent(window.location.search).substr(1).match(reg);\n    return r!=null ? decodeURI(r[2]) : null;\n}\n\n(function(){\n\tvar ratio = window.devicePixelRatio || 1;\n\tvar UA = String(navigator.userAgent).toLowerCase();\n\t//alert(navigator.userAgent)\n\t//var hasTouch = document.documentElement.ontouchstart !== undefined;\n\tvar isMobile = UA.indexOf('mobile') > -1;\n\t//var isAndroid = UA.indexOf('android') > -1;\n\tvar isIPad = UA.indexOf('ipad') > -1;\n\t//var isIPhone = UA.indexOf('iphone') > -1;\n\t//此方法误判很严重\n\t//var isBigScreen = Math.min(screen.height/ratio,screen.width/ratio) > 600;\n\t//针对点一点扫一扫,跳转结果界面\n\tvar g_type = getUrlParam(\"type\");\n\tvar g_tips = getUrlParam(\"tips\");\n\tvar tabs = getUrlParam(\"tabs\");\n\tvar sms = getUrlParam(\"sms\");\n\t\n\t//检测平台\n\tvar p = String(navigator.platform.toLowerCase()),\n\t\tisWin = p.indexOf(\"win\") == 0,  \n\t\tisMac = p.indexOf(\"mac\") == 0, \n\t\tisX11 = (p == \"x11\") || (p.indexOf(\"linux\") == 0);  \n\t\t\n\tvar template = getUrlParam(\"template\") || \"default\";\n\tvar $href = '';\n\t//1、not mobile //pc\n\t//2、mobile but ipad\n\t//3、big screen //android pad\n\t//4、检测平台\n\tif((isMobile && !isIPad)||!(isWin||isMac||isX11||isIPad)){\n\t\t$href = \"mobile.html\";\n\t\tif(tabs == \"wx\"){\n\t\t\tif (sms != 1){\n\t\t\t\tif(g_type==\"logout\") {\n\t\t\t\t\tlocation.href = template+\"/result.html?type=success\";\n\t\t\t\t\treturn;\n\t\t\t\t} else if(g_type==\"authfailed\") {\n\t\t\t\t\tlocation.href = template+\"/result.html?type=failure&g_tips=\"+g_tips;\n\t\t\t\t\treturn;\n\t\t\t\t} else if(g_type==\"authalready\") {\n\t\t\t\t\tlocation.href = template+\"/result.html?type=warn&g_tips=\"+g_tips;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t$href = \"mobile_sms.html\";\n\t\t\t\tlocation.href = template+\"/\"+$href+location.search;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\t\t\n\t}else{\n\t\t$href = \"pc.html\";\n\t}\t\n\tlocation.href = template+\"/\"+$href+location.search;\n})();\n</script>\n</body>\n</html>\n\n",  
    "statusCode": 200,  
    "header": {  
        "Set-Cookie": "AUTHSESSID=8f94d30c53c5; HttpOnly;Secure;",  
        "Content-Length": "2250",  
        "Connection": "keep-alive",  
        "X-Frame-Options": "SAMEORIGIN",  
        "Content-Type": "text/html",  
        "Date": "Thu, 06 May 2021 08:08:00 GMT"  
    },  
    "errMsg": "request:ok",  
    "cookies": ["AUTHSESSID=8f94d30c53c5; HttpOnly;Secure;"]  
}

更多关于uni-app 网络请求问题:web端正常,app端部分机型返回html标签内容,疑似检测信息的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

你好,请问你解决了吗

更多关于uni-app 网络请求问题:web端正常,app端部分机型返回html标签内容,疑似检测信息的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这个问题通常是由于服务器端对特定机型的User-Agent进行了特殊处理导致的。从返回的HTML内容可以看出,这是一个设备检测脚本,用于根据用户代理重定向到不同的页面。

在uni-app中,App端和Web端的User-Agent不同,服务器可能将某些Android设备识别为需要跳转到特定页面,从而返回了HTML而不是预期的JSON数据。

解决方案:

  1. 检查请求头:确保App端发送的请求头与Web端一致,特别是User-Agent。可以在uni.request中手动设置与Web端相同的headers。

  2. 服务器端修复:联系后端开发人员,调整设备检测逻辑,确保API接口对所有客户端返回统一的数据格式,而不是进行页面跳转。

  3. 临时解决方案:在请求时添加特定的header标识,让服务器识别为API请求而非页面访问:

uni.request({
    url: 'your-api-url',
    header: {
        'X-Requested-With': 'XMLHttpRequest',
        'Accept': 'application/json'
    }
})
回到顶部