Android向本地PHP服务器发送POST数据时连接被拒绝求助
问题排查与解决方案
先看你报错堆栈里最关键的一行:Caused by: java.net.SocketException: Permission denied,这是核心问题,咱们一步步来解决:
1. 补全Android网络权限
你的应用缺少访问网络的必要权限,必须在AndroidManifest.xml里添加以下配置:
<uses-permission android:name="android.permission.INTERNET" /> <!-- 可选,添加后可辅助判断设备网络状态 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
2. 处理Android 9+的明文网络限制
如果你的设备是Android 9(API 28)及以上版本,系统默认禁止明文HTTP请求(仅允许HTTPS),而你的请求目标是http://192.168.1.103,所以需要单独配置允许该IP的明文访问:
- 在
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.103</domain> </domain-config> </network-security-config>
- 然后在
AndroidManifest.xml的<application>标签中引用这个配置:
<application ... android:networkSecurityConfig="@xml/network_security_config"> ... </application>
3. 替换已弃用的Apache HttpClient
Android 6.0(API 23)开始已经弃用了org.apache.http相关类,继续使用可能会出现兼容性问题,推荐换成原生的HttpURLConnection,这里给你改写后的postData方法示例:
private void postData() { try { String postReceiverUrl = "http://192.168.1.103/bot/post.php"; Log.v(TAG, "postURL: " + postReceiverUrl); URL url = new URL(postReceiverUrl); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setDoOutput(true); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); // 构造POST参数 String postData = "abcd=1234&asif=5678"; OutputStream os = conn.getOutputStream(); os.write(postData.getBytes(StandardCharsets.UTF_8)); os.flush(); os.close(); // 获取服务器响应 int responseCode = conn.getResponseCode(); if (responseCode == HttpURLConnection.HTTP_OK) { BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); StringBuilder responseStr = new StringBuilder(); String line; while ((line = in.readLine()) != null) { responseStr.append(line); } in.close(); Log.v(TAG, "Response: " + responseStr.toString()); } else { Log.e(TAG, "Server returned error code: " + responseCode); } conn.disconnect(); } catch (IOException e) { e.printStackTrace(); } }
4. 本地服务器基础排查
确保你的PHP服务器本身没有问题:
- 用同一局域网内的电脑浏览器访问
http://192.168.1.103/bot/post.php,确认服务器能正常响应; - 用Postman发送POST请求到该地址,携带
abcd=1234和asif=5678参数,验证服务器能正确接收并返回数据; - 检查服务器防火墙是否拦截了80端口(如果用了自定义端口,要在URL里补充,比如
http://192.168.1.103:8080/bot/post.php); - 确认手机和服务器连接在同一个Wi-Fi网络下,IP地址没有输入错误。
按照上面的步骤逐一排查,应该就能解决连接被拒绝的问题了。
内容的提问来源于stack exchange,提问作者Asif
相关产品推荐
相关产品推荐

