Android请求HTTP端点遇Connection reset异常,如何配置允许HTTP请求?
Android HTTP请求连接重置问题解决方法
问题现象
客户端抛出java.net.SocketException: Connection reset异常,服务器端对应出现java.io.IOException: Connection reset by peer异常,但:
- 使用HTTPS请求同一服务器正常
- Postman请求该HTTP端点正常
- 已配置
INTERNET权限、networkSecurityConfig允许指定IP的明文流量
解决步骤
1. 修复Retrofit URL配置冲突
你的Retrofit同时设置了baseUrl,又在@GET注解中使用完整HTTP URL,这会导致URL解析异常,引发连接重置。
修正接口定义:将@GET中的完整URL改为相对路径:
@GET("api/v1/findBusStop/{lat}/{lng}") suspend fun findBusStopByLocation( @Path("lat") latitude: Double, @Path("lng") longitude: Double, @Query("radius") radius: Int ): List<BusStop>
修正baseUrl常量:确保末尾带有斜杠:
const val BUSSO_SERVER_BASE_URL = "http://192.168.1.2:8080/"
2. 确认Network Security Config有效性
当前的network_security_config.xml配置逻辑正确,但如果是测试场景,可临时改为全局允许明文流量(仅限学习测试):
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true" /> </network-security-config>
测试通过后,建议恢复回原有的指定IP配置,保证安全性。
3. 排除OkHttpClient额外配置干扰
暂时移除缓存等额外配置,使用最简版OkHttpClient测试:
fun provideRetrofit(context: Context): MyApi { val okHttpClient = OkHttpClient.Builder() .build() val retrofit: Retrofit = Retrofit.Builder() .baseUrl(BUSSO_SERVER_BASE_URL) .addConverterFactory( GsonConverterFactory.create( GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").create() ) ) .client(okHttpClient) .build() return retrofit.create(MyApi::class.java) }
若问题消失,再逐步添加缓存等配置排查冲突。
4. 验证服务器与网络环境
- 确认服务器8080端口正常监听HTTP请求,无防火墙/端口占用问题
- 检查Android设备与服务器在同一局域网,能正常ping通
192.168.1.2
5. 检查应用网络权限
进入Android设备的应用权限设置,确认已授予应用网络访问权限(WiFi/移动数据),部分定制ROM会默认限制应用网络访问。
内容的提问来源于stack exchange,提问作者Oleh Liskovych
相关产品推荐
相关产品推荐

