问题描述
|
我正在尝试使用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。
设置内容长度标题。
设置连接以使用输出,并将查询作为输出。
解决方法
该代码尝试打开与
www.awebsite.com
的连接,但它还会向Host字段www.google.com
发送非法/无效值。 HTTP规范绝对不允许这样做。
您必须对此进行更正,以确保位于“ 1”的服务器接收到正确的头集,以便它可以处理您的请求。
强制链接:如何使用java.net.URLConnection触发和处理HTTP请求?
, 似乎在这种情况下,HTTP 400并不是用来表示请求语法中的错误,而是表示如下所述的逻辑错误:HTTP 400(错误请求)用于逻辑错误,而不是格式错误的请求语法。