gpt4 book ai didi

java - HttpURLConnection 不提交 POST 数据 (Android)

转载 作者:行者123 更新时间:2023-12-02 04:04:00 25 4
gpt4 key购买 nike

我正在 Android 应用中提交 POST 参数,但是服务器没有收到任何参数(Play Framework 中的 request().body().asFormUrlEncoded() 返回一个空 map )。以下是用于提交请求的 AsyncTask 代码:

private static AsyncTask<String, Void, String> register = new AsyncTask<String, Void, String>() {
@Override
protected String doInBackground(String... params) {
String email = params[0], username = params[1], password = params[2];
try {
URL url = new URL(REGISTER);
HttpURLConnection conn;
conn = (HttpURLConnection)url.openConnection();
conn.setDoOutput(true);
String urlParams = URLEncoder.encode("username=" + username + "&email=" + email + "&password=" + password, "UTF-8");
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length", String.valueOf(urlParams.length()));
conn.connect();
OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
writer.write(urlParams);
writer.flush();
writer.close();

int resp = conn.getResponseCode();
Object content = conn.getContent();
conn.disconnect();
if(resp != 200)
return ERROR + "Bad response: " + resp + ", ";// + conn.getContent();
return content.toString();
} catch (IOException e) {
System.out.println("IOException occurred: ");
e.printStackTrace();
return ERROR + e.getMessage();
}
}
};

我确实计划制作一些更漂亮的东西,但我需要先完成这项工作。到目前为止,每个答案都建议我已经做过一些事情(例如 connect()、设置 Content-Length、完成后关闭 Writer、获取响应),但它仍然没有不工作。服务器收到连接,但正文为空,服务器返回 400

最佳答案

您不需要设置内容长度或调用connect():这些都是自动的。但您需要通过 API 设置内容类型,而不是通过请求属性。否则它会被 API 的默认值覆盖,这就是为什么不编码修复它。

关于java - HttpURLConnection 不提交 POST 数据 (Android),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34559551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com