java - HttpURLConnection GET 请求得到 400 Bad Request

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

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

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。
  • 设置内容长度 header 。
  • 将连接设置为使用输出并将查询作为输出。

最佳答案

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

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

必填链接:How to use java.net.URLConnection to fire and handle HTTP requests?

关于java - HttpURLConnection GET 请求得到 400 Bad Request,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6341602/

相关文章:

java - Spring @ResponseBody Json 循环引用

javascript - 是否可以读取另一台服务器中的 json 文件,如何读取?

php - 编码 $_GET 变量 URL 忽略符号 "&"字符

Android:在 AsyncTask 内部或单独的 Rest API 调用代码中分离?

java - 访问 URL 的特定部分

Java 运行时进程不会 "Grep"

java - 使用条件变量阻止生产者消费者 Java 实现

java - 显然,如果已经存在很多 AssetFileDescriptors,则在 native 端的 Android 上创建文件会失败

php - 保留 .htaccess 中的 & 符号登录 URL

android - NSURLSession 等同于 Android?