使用Capacitor在安卓物理设备上无法发起HTTP请求的问题
安卓物理设备HTTP请求404排查解决指南
问题定位
网页端Vue PWA的HTTP请求正常,但安卓物理设备上返回404,HTTPS请求无异常,替换capacitor-http后问题依旧,说明问题核心不在请求库,而是安卓系统限制或设备-服务器网络/配置不匹配导致。
排查与解决步骤
修复安卓明文HTTP限制
安卓9及以上默认禁止明文HTTP请求,需配置网络安全策略:- 在
android/app/src/main/res/xml/下新建network_security_config.xml,内容如下:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">46.175.215.101</domain> </domain-config> </network-security-config>- 在
AndroidManifest.xml的<application>标签中添加引用:
<application ... android:networkSecurityConfig="@xml/network_security_config">- 在
验证设备与服务器连通性
用安卓设备自带浏览器直接访问拼接后的完整URL(如http://46.175.215.101:8089/IMSToWebProxyNew/receptions):- 若浏览器也返回404:说明服务器可能限制了安卓设备的请求(如UA校验),或设备所在网络无法访问该服务器(如服务器在局域网,设备未接入同网段)
- 若浏览器能正常返回:检查代码中
baseUrl的拼接逻辑,打印实际请求URL确认无格式错误(比如多/少斜杠)
确认Capacitor网络权限
检查AndroidManifest.xml中是否已添加必要权限:<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />排查服务器端配置
部分服务器会校验请求的Origin或User-Agent:网页端Origin为浏览器域名,而安卓Capacitor应用的Origin是capacitor://localhost,需确保服务器允许该Origin的跨域请求(避免因CORS导致请求被重定向到不存在的路径)
代码调试技巧
在请求前打印完整URL,便于在Android Studio的Logcat中排查拼接错误:
export async function allDeps(): Promise<ReceptionDTO[] | undefined> { const baseUrl = getBaseUrl(); const fullUrl = `${baseUrl}/receptions`; console.log('当前请求URL:', fullUrl); return (await Http.get({url: fullUrl})).data; }
内容的提问来源于stack exchange,提问作者Дмитрий
相关产品推荐
相关产品推荐

