开发者社区 问答 正文

在安卓使用钉钉小程序webview的时候遇到了412错误

现在有这样一个网页

https://yunbanktest.bankcomm.com/personbank/walletPay/H5Cashier/Cashier/cashier_main.html

这个服务器是挂在交行总行的,我的需求是在钉钉第三方企业应用中使用webview打开这个页面进行订单支付

这个页面在iOS端,或者模拟器里,亦或是普通的浏览器里,都可以正常访问,但是在安卓的钉钉第三方企业应用的webview里,也就是我的项目跑在安卓机器上,就会报412错误

这里我猜想可能是钉钉重写了webview,或者js引擎之类的,并不是用的Chrome,导致请求的标识符不同于一般的浏览器。因此被交行总行的服务器拒绝,但是我即搞不到总行服务器的信息,也看不了钉钉请求的信息,因为是https的请求,抓包也抓不了。现在很是烦恼。不知道该如何解决这个问题。

请问这个有什么解决办法么

image.png

这个是正常访问的截图

image.png

这个是Android端打开上述地址时候的界面

展开
收起
1866699998781845 2022-10-14 10:34:44 1535 分享 版权
阿里云 AI 助理回答

根据您的描述,您在尝试通过钉钉安卓端的webview加载一个HTTPS网页时遇到了412错误,而该页面在其他环境(如iOS、模拟器、普通浏览器)中可以正常访问。此问题可能与钉钉webview的定制化实现有关,特别是关于HTTPS请求头或用户代理等方面的差异,导致服务器端识别不一致并拒绝了请求。

尽管直接获取和修改钉钉webview的具体配置较为困难,以下是一些可能帮助您解决此问题的策略:

诊断与尝试方案

1. 修改User-Agent

  • 任务描述:尝试修改webview中的User-Agent字符串,使其模拟常见的浏览器标识,以期通过服务器验证。

  • 实现步骤

    • 在您的钉钉企业应用开发中,针对webview加载页面前,使用WebSettings设置User-Agent。
    WebView webView = findViewById(R.id.webView);
    WebSettings settings = webView.getSettings();
    String newUA = "Mozilla/5.0 (Linux; Android 11; SM-G988N Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.105 Mobile Safari/537.36"; // 示例为常见Android Chrome UA
    settings.setUserAgentString(newUA);
    
  • 注意事项

    • 实验不同的User-Agent值,找到一个被目标服务器接受的版本。
    • 注意合规性,避免冒充特定浏览器可能导致的法律或政策风险。

2. 调整HTTPS安全设置

  • 尝试降低webview对HTTPS证书验证的严格程度,但需谨慎操作,因为这可能引入安全风险。
    settings.setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);
    settings.setAcceptThirdPartyCookies(true);
    

3. 添加网络拦截器

  • 如果可行,尝试在webview中添加网络拦截器,检查或修改发出的请求头,确保它们符合服务器要求。

4. 与钉钉开发者支持沟通

  • 联系钉钉开发者支持或社区,了解是否有已知的兼容性问题或官方推荐的解决方案。

5. 测试与验证

  • 在每次调整后,务必在真实安卓设备上的钉钉环境中进行测试,确认更改是否有效。

综合建议

由于直接修改HTTPS请求的标识符或绕过服务器的安全策略存在挑战且可能不合规,最佳途径是通过模拟标准浏览器行为或与服务提供方(交行)及平台方(钉钉)沟通来寻找官方支持或推荐的解决方案。同时,考虑到安全性和用户体验,所有变更都应在确保数据安全和隐私保护的前提下进行。

希望上述建议能帮助您解决问题。如果情况依旧,深入的技术排查可能需要更详尽的日志信息或与相关技术支持团队的协作。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答