使用HttpURLConnection的JAVA中的POST获得HTTP响应代码400

时间:2019-01-11 20:57:16

标签: java json api http post

我在建立HTTP连接和使用Java中的API方面还很陌生,所以我不确定问题出在哪里。当我发送POST连接请求以将JSON格式的文本字符串发送到另一端时,我收到一条错误以及400响应代码。当我查找该代码时,似乎我的连接格式不正确。下面的代码以及错误消息。请帮忙!谢谢!

public void sendToAPI(String urlPass, String param) throws IOException {

    URL url = new URL(urlPass);
    HttpURLConnection connectionOut = (HttpURLConnection) url.openConnection();
    connectionOut.setRequestMethod("POST");
    connectionOut.setConnectTimeout(5000);
    connectionOut.setReadTimeout(5000);
    connectionOut.setRequestProperty("Content-Type", "application/json");
    connectionOut.setRequestProperty("Content-Length", Integer.toString(param.length()));
    connectionOut.setDoOutput(true);
    connectionOut.setDoInput(true);
    connectionOut.connect();

    DataOutputStream stream = new DataOutputStream(connectionOut.getOutputStream());
    stream.writeUTF(param);
    stream.flush();
    stream.close();

    int responsecode = connectionOut.getResponseCode();
    if(responsecode != 200) {
        System.out.println("Response Code is " + responsecode);             
    }

    BufferedReader in = new BufferedReader(
            new InputStreamReader(connectionOut.getInputStream()));
    String output;
    StringBuffer response = new StringBuffer();

    while ((output = in.readLine()) != null) {
        response.append(output);
    }
    in.close();

    //printing result from response
    System.out.println(response.toString());

}

响应码为400 线程“主” java.io.IOException中的异常:服务器为URL:XXX返回HTTP响应代码:400

2 个答案:

答案 0 :(得分:0)

因此,在使用DataOutputStream之后,我替换了以下代码:

DataOutputStream stream = new DataOutputStream(connectionOut.getOutputStream());
stream.writeUTF(param);

我在网上找到了另一个例子:

OutputStream os = connectionOut.getOutputStream();
os.write(param.getBytes());
os.flush();
os.close();

我不确定为什么,但是这突然得到了我正在寻找的正确响应代码,因此发送的格式符合他们的要求。感谢您的所有答复。

答案 1 :(得分:0)

您可以尝试以下代码:

InputStream inputStream;
if (responseCode == 200) {
    inputStream = con.getInputStream();
} else {
    inputStream = con.getErrorStream();
}

BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder builder = new StringBuilder();
String lines;
while ((lines = reader.readLine()) != null) {
    builder.append(lines);
    builder.append(System.getProperty("line.separator"));
}

String retStr = builder.toString().trim();
reader.close();

System.out.println("retStr: " + retStr);