模拟器无法连接网络问题定位
=============

#### 问题现象

模拟器在运行应用时出现网络请求失败，具体表现包括但不限于：

*   **场景一：DNS解析失败**：请求报错 AxiosError: {"code":2300006,"message":"Couldn't resolve host name"}。
*   **场景二：本地服务访问失败**：应用请求本地电脑（宿主机）搭建的后端接口时无响应，使用 127.0.0.1 或 localhost 无法连接。
*   **场景三：HTTPS请求受限**：访问未配置证书的远程服务器或自签名服务器时请求被拦截，而浏览器访问正常；或通过内网穿透工具访问正常，直接访问IP异常。
*   **场景四：网络环境受限**：内网环境可访问，切换外网后无法访问；或公司内网环境下无法连接网络。

#### 背景知识

*   [模拟器访问网络](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-emulator-access-network)：模拟器可以通过本地计算机的网络直接访问互联网。模拟器访问网络实际上利用的是本地计算机的以太网或者WLAN，与本地计算机共享同一网络资源。

#### 问题定位

根据不同的报错场景，建议按以下维度进行排查：

*   **场景一：域名解析失败（报错 code:2300006）**
    1.  **DNS配置错误**：检查模拟器或宿主机的DNS解析地址是否配置正确，错误的DNS导致域名无法解析为IP。
    2.  **Windows用户名问题**：若宿主机为Windows系统，检查电脑用户名是否包含中文。中文用户名可能导致部分系统组件或网络工具路径解析异常，影响网络功能。
    3.  **网络代理配置缺失**：若宿主机开启了VPN或处于需要代理的公司内网，模拟器未配置相应代理将无法访问外网。
*   **场景二：无法访问宿主机本地服务。**
    1.  **地址引用错误**：在模拟器代码中使用 localhost 或 127.0.0.1，该地址指向模拟器自身，导致找不到宿主机的服务端口。
    2.  **网络环境隔离**：模拟器与宿主机处于不同的网络环境，需确认两者是否在逻辑上处于同一局域网段。
*   **场景三：HTTPS/证书相关报错。**
    1.  **HTTP明文限制**：直接请求HTTP接口（非HTTPS），被模拟器安全策略拦截。
    2.  **证书校验失败**：远程服务器未配置合法证书（如自签名证书），或使用了内网穿透工具（部分工具自带证书处理机制），导致TLS握手失败或前端报错。
*   **场景四：网络环境受限。**
    
    **公司内网限制**：宿主机网络访问受限（如防火墙、网关策略），导致模拟器共享的网络资源无法正常通信。
    

#### 分析结论

*   **场景一**：DNS配置不当直接导致域名解析失败。
*   **场景二**：由于模拟器是独立环境，访问宿主机服务必须使用宿主机的真实局域网IP地址（如 192.168.x.x），而非回环地址。
*   **场景三**：高版本系统强制HTTPS是导致HTTP请求失败或自签名证书报错的根本原因。内网穿透工具之所以能成功，往往是因为其自动提供了HTTPS隧道或预置了证书兼容处理。
*   **场景四**：在复杂的网络环境下（如使用VPN），必须显式配置代理，否则流量无法正确路由。

#### 修改建议

*   **针对场景一（DNS解析失败）：**
    1.  **配置DNS**：建议在模拟器网络设置中配置安全合理的DNS解析地址，例如 114.114.114.114，并删除其他无效的DNS配置。
    2.  **修改用户名**：Windows操作系统建议将电脑用户名修改为英文或数字，避免因路径编码问题导致的网络组件失效。
    3.  **配置代理**：如需通过代理服务器请求，请参考 [模拟器网络代理配置](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-emulator-more-features#section206461549731) 进行设置。
*   **针对场景二（访问本地服务）：**
    1.  **使用局域网IP**：获取宿主机的实际局域网IP地址（可通过 ipconfig 或 ifconfig 查看），将代码中的请求地址替换为该IP。
    2.  **参考文档**：详细配置可参考 [模拟器访问本机网络](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-emulator-access-network#section7797160144810)。
*   **针对场景三（HTTPS/证书问题）：**
    1.  **部署合法证书**：为远程服务器部署合法的SSL证书。
    2.  **安装自签名证书**：若为测试环境，可生成自签名证书，并通过模拟器的“设置 -> 安全 -> 安装证书”功能将证书安装到模拟器中。
    3.  **临时关闭校验（仅限调试）**：在代码中配置 httpsAgent: { rejectUnauthorized: false } 以跳过证书校验（注意：生产环境不推荐）。
    4.  **排查跨域问题**：确保服务器响应头包含正确的CORS配置，如 Access-Control-Allow-Origin: \*、Access-Control-Allow-Methods: GET, POST、PUTAccess-Control-Allow-Headers: Content-Type。
*   **针对场景四（网络环境受限）：**
    
    确认宿主机网络是否正常，若在公司内网，请参照“场景一”中的代理配置建议进行设置。
    

#### 常见FAQ

Q：模拟器无法通过 localhost 访问宿主机后端服务怎么办？

A：模拟器上的 localhost 代表模拟器本身而非宿主机。请使用宿主机的局域网IP地址进行访问，参考 [模拟器访问本机网络](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-emulator-access-network#section7797160144810)。

Q：为什么模拟器的网络显示为以太网？

A：模拟器访问网络利用的是本地计算机的以太网或WLAN，与本地计算机共享同一网络资源。显示为以太网是正常的共享网络表现。

Q：为什么内网穿透可以访问，直接部署到服务器却报错？

A：内网穿透工具通常会自动启用HTTPS加密隧道或预置证书，从而规避了HTTP明文传输限制或证书校验问题。直接部署服务器时，需确保服务器配置了HTTPS证书，或已在模拟器中安装了相应的自签名证书。