Android HttpURLConnection请求Profiler可见但未到达微控制器的问题解决
问题解决:Android HttpURLConnection POST请求未抵达本地服务器
问题场景
我最近在开发Android应用时碰上个头疼的问题:尝试用HttpURLConnection访问本地IP的Web服务器,明明Postman测试服务器完全正常,微控制器也能检测到其他设备的连接(说明网络通路没问题),Android Studio Profiler也能抓到请求并显示目标IP,但请求就是死活到不了微控制器。
我已经在AndroidManifest.xml里加了必要的权限:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
当时的核心代码片段如下(还没做数据收发,只尝试建立连接):
String urlString = "http://192.168.2.115/request"; // URL to call OutputStream out = null; try { URL url = new URL(urlString); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setDoInput(true); conn.connect(); } catch (Exception e) { return e.getMessage(); }
解决方法
折腾了半天发现,问题出在HttpURLConnection的工作机制上:connect()方法仅仅是建立了TCP连接,并不会触发完整的HTTP请求发送。必须调用诸如getInputStream()、getResponseCode()这类读取响应的方法,才会促使系统发送HTTP请求头,完成整个请求流程。
我在conn.connect()之后加了这一行代码,请求立刻就正常抵达微控制器了:
conn.getInputStream();
内容的提问来源于stack exchange,提问作者matthesinator
相关产品推荐
相关产品推荐

