POST请求持续返回400错误:Android与Python服务端调试问题
解决Android POST请求返回400 Bad Request的问题
你遇到的核心问题是请求数据的传递方式错误——你把POST请求的文本数据放在了HTTP请求头里,而大多数Python服务端默认是从请求体中解析POST参数的,这就导致服务端无法识别你的请求格式,直接返回400错误。
错误原因拆解
你的Android代码里用了connection.setRequestProperty("ImageBase64", data),这是把数据塞进了HTTP请求的Header字段中,而非POST请求的Body部分。Python服务端通常期望POST数据存放在请求体内(比如raw文本、form表单格式),自然会判定你的请求不符合规范,返回400 Bad Request。
修正后的Android代码
下面是调整后的post方法,把数据正确写入请求体发送:
fun post(url: URL, data: String): String { val connection = url.openConnection() as HttpsURLConnection connection.apply { doOutput = true doInput = true connectTimeout = 5000 readTimeout = 5000 requestMethod = "POST" // 设置Content-Type,告诉服务端你发送的是UTF-8编码的纯文本 setRequestProperty("Content-Type", "text/plain; charset=utf-8") } // 将数据写入请求体 connection.outputStream.use { outputStream -> outputStream.write(data.toByteArray(Charsets.UTF_8)) outputStream.flush() } // 读取服务端响应 return if (connection.responseCode == HttpsURLConnection.HTTP_OK) { connection.inputStream.bufferedReader().use { it.readText() } } else { throw Exception("请求失败,响应码: ${connection.responseCode}") } }
对应Python服务端示例(以Flask为例)
如果你的Python服务端基于Flask开发,需要从请求体中读取数据,示例代码如下:
from flask import Flask, request app = Flask(__name__) @app.route('/your-api-path', methods=['POST']) def handle_post_request(): # 读取请求体中的文本数据 received_data = request.get_data(as_text=True) # 这里可以添加你的数据处理逻辑 return f"已收到数据: {received_data}" if __name__ == '__main__': app.run(host='0.0.0.0', port=5000, debug=True)
额外注意点
- 如果你的数据是Base64编码的图片,也可以将
Content-Type改为application/octet-stream,但纯文本场景下用text/plain更直接。 - 确保Android端和Python服务端的请求路径、网络协议(HTTP/HTTPS)完全一致;如果用HTTPS,测试阶段可临时绕过证书校验,但生产环境必须配置合法SSL证书。
内容的提问来源于stack exchange,提问作者Alexander Ashkinadze
相关产品推荐
相关产品推荐

