服务器返回HTTP响应代码:400为URL:java.io.IOException

时间:2016-12-13 12:57:56

标签: java http-get

我做错了什么?请看一下代码。

HttpURLConnection conn = (HttpURLConnection) new URL(http_url).openConnection();
conn.setRequestMethod("GET");
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
/*
java.io.IOException: Server returned HTTP response code: 400 for URL: http_url
  at sun.net.www.protocol.http.HttpURLConnection.getInputStream
*/

如果我在浏览器中打开http_url,它正在运行。

3 个答案:

答案 0 :(得分:1)

您未连接(来自http://alvinalexander.com/blog/post/java/how-open-url-read-contents-httpurl-connection-java的下一个代码)。

 HttpURLConnection connection = (HttpURLConnection) url.openConnection();

      // just want to do an HTTP GET here
      connection.setRequestMethod("GET");

      // uncomment this if you want to write output to this url
      //connection.setDoOutput(true);

      // give it 15 seconds to respond
      connection.setReadTimeout(15*1000);
      connection.connect();

      // read the output from the server
      reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));

答案 1 :(得分:1)

我很困惑因为我收到了Java错误而不是错误有效负载。后来当我检查postman中的http_url时,它显示了错误有效负载以及响应代码400.如果有效负载可用,浏览器不会显示响应代码。实际上,如果响应代码> = 400,我应该使用conn.getErrorStream()代替conn.getInputStream()

答案 2 :(得分:0)

您必须遵循HTTP协议,并在读取响应之前设置服务器期望获取的所有HTTP标头。绝对你错过了一个或多个标题,如内容类型,接受等。也许服务器不喜欢Java代理标题,喜欢来自IE,Chrome,Firefox等的代理。 所以服务器是对的,你要求的很糟糕: - )