You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Retrofit2真机请求ResponseBody为null求助:模拟器正常真机报403

解决Retrofit2在真机访问本地服务返回403/ResponseBody为null的问题

我之前也碰到过几乎一模一样的情况,结合你的排查结果,问题的核心其实是模拟器和真机对「localhost」的解析完全不同,再加上本地服务器的访问权限限制,才导致了这个差异。下面一步步给你解决:

1. 先搞懂为什么模拟器正常、真机不行

  • 安卓模拟器里的localhost(或者10.0.2.2)是映射到你电脑的本地服务的,所以能正常访问到phpMyAdmin
  • 但真机的localhost是指向它自己的系统,根本找不到你电脑上的服务,再加上你的服务器可能只允许本地IP(127.0.0.1)访问,所以直接返回了403禁止访问

2. 第一步:把baseUrl里的localhost换成电脑的局域网IP

首先确保你的真机和运行phpMyAdmin的电脑连在同一个WiFi下,然后:

  • Windows电脑:按Win+R输入cmd,执行ipconfig,找「无线局域网适配器 WLAN」里的「IPv4地址」,比如192.168.1.105
  • Mac/Linux:打开终端执行ifconfig或ip addr,找WiFi对应的局域网IP

然后修改你的Retrofit代码里的baseUrl,比如原来的http://localhost/api/改成http://192.168.1.105/api/

3. 第二步:修改服务器配置,允许局域网访问

403状态码说明服务器拒绝了真机的请求,得调整Apache/phpMyAdmin的权限设置:

针对Apache(XAMPP/WAMP这类集成环境)

找到Apache的配置文件httpd.conf(或者虚拟主机配置httpd-vhosts.conf),找到类似下面的配置段:

<Directory "path/to/your/phpmyadmin">
    AllowOverride All
    Require local
</Directory>

把Require local改成Require all granted(测试用),或者更安全的Require ip 192.168.1.0/24(只允许同一个局域网段的设备访问)

针对phpMyAdmin的单独配置

打开phpMyAdmin目录下的config.inc.php,找到下面的配置项,添加允许局域网IP的规则:

$cfg['Servers'][$i]['AllowDeny']['rules'] = array(
    'allow 127.0.0.1',
    'allow 192.168.1.0/24' // 换成你的局域网段
);

4. 第三步:处理安卓真机的网络限制

  • 确保你的AndroidManifest.xml里已经添加了网络权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  • 如果是Android 9(API 28)及以上,默认禁止明文HTTP请求,需要配置网络安全规则:
    在res/xml目录下创建network_security_config.xml:
    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <domain-config cleartextTrafficPermitted="true">
            <domain includeSubdomains="true">192.168.1.105</domain> <!-- 你的电脑IP -->
        </domain-config>
    </network-security-config>
    
    然后在AndroidManifest.xml的application标签里引用:
    <application
        ...
        android:networkSecurityConfig="@xml/network_security_config">
    

最后验证

先在真机的浏览器里输入http://你的电脑IP/phpmyadmin,如果能正常打开,说明服务器配置没问题;再运行你的App,Retrofit应该就能拿到正常的ResponseBody了。

内容的提问来源于stack exchange,提问作者JMAR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:34:30