【问题标题】:POST in JAVA using HttpURLConnection getting a HTTP response code 400使用 HttpURLConnection 在 JAVA 中发布获取 HTTP 响应代码 400
【发布时间】:2019-06-06 19:31:47
【问题描述】:

我对建立 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 线程“main”java.io.IOException 中的异常:服务器返回 HTTP 响应代码:400 for URL:XXX

【问题讨论】:

  • 你的网址和参数是什么?
  • url="vautointerview.azurewebsites.net/api" + datasetId.get("datasetId") + "/answer" param="answer=" + Dealers.toString() 它没有显示,但网址格式正确前面有 http://,只是一个简单的字符串。和参数一样,只是一个String,我认为不会触发400响应码。
  • 参数是否包含多字节字符?内容长度可能是错误的。

标签: java json api http post


【解决方案1】:

所以在玩了DataOutputStream之后,我替换了下面的代码:

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

还有一个我在网上找到的例子:

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

我还不确定为什么,但这突然得到了我正在寻找的正确响应代码,所以它发送的格式与他们要求的一致。感谢所有回复。

【讨论】:

    【解决方案2】:

    你可以试试这个代码:

    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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-09
      相关资源
      最近更新 更多