HttpURLConnection GET请求获得400 Bad Request

时间:2011-06-14 09:30:30

标签: java get httpurlconnection http-status-code-400

我正在尝试使用HttpURLConnection在Java中使用一些参数执行GET请求。然而,每次我这样做,每次都会收到400:不良请求。 我需要更改什么才能使其正常工作?

String url = "http://www.awebsite.com/apath?p1=v1&p2=v2&p3=v3";
HttpURLConnection conn = (HttpURLConnection)new URL(url).openConnection();
conn.setDoInput(true);
conn.setDoOutput(false);
conn.setUseCaches(false);
conn.setRequestMethod("GET");
conn.setRequestProperty("Host", "www.awebsite.com");
conn.setRequestProperty("User-Agent", "Mozilla/4.0");
conn.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
conn.setRequestProperty("Accept-Language", "en-us,en;q=0.5");
conn.setRequestProperty("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
conn.setRequestProperty("Keep-Alive", "115");
conn.setRequestProperty("Connection", "keep-alive");
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuilder data = new StringBuilder();
String s = "";
while((s = br.readLine()) != null)
    data.append(s);
String pageData = data.toString();

我试过了:

  • 在整个查询中使用URLEncoder(在?之后),只使用值。
  • 设置内容长度标题。
  • 设置连接以使用输出并将查询作为输出。

2 个答案:

答案 0 :(得分:2)

代码尝试打开与www.awebsite.com的连接,但它也会为主机字段发送非法/无效值:www.google.com。 HTTP规范绝对不允许这样做。

您必须更正此问题,以确保www.awebsite.com处的服务器收到正确的标头集,以便它可以处理您的请求。

强制性链接How to use java.net.URLConnection to fire and handle HTTP requests?

答案 1 :(得分:2)

在这种情况下,似乎HTTP 400不用于表示请求语法中的错误,而是如下所述的逻辑错误:HTTP 400 (bad request) for logical error, not malformed request syntax