java中的HTTP POST请求 - 设置内容长度

时间:2014-10-08 00:49:22

标签: java http-post

下面是我的代码,它执行POST请求登录网站。当我运行相同的时候,我收到消息响应为411.有人可以帮我设置正确的内容长度吗?

  try {

        String request = "http://<domain.com>/login";

        URL url = new URL(request);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setDoInput(true);

        connection.setInstanceFollowRedirects(false);
        connection.setRequestProperty("Content-Length", "1");
        connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

        connection.setRequestProperty("email", "abc");
        connection.setRequestProperty("password", "xyz");

        connection.setDoOutput(true);

        connection.setRequestMethod("POST");

        int code = connection.getResponseCode();
        System.out.println("Response Code of the object is " +code);
        if(code == 200)
            System.out.println("OK");
        connection.disconnect();
        } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

3 个答案:

答案 0 :(得分:2)

好的 - 您没有将任何内容移动到请求正文中,因此您应将长度设置为“0”。

添加:

connection.connect();

后:

connection.setRequestMethod( “POST”);

google“httpurlconnection post parameters”,用于向POST请求添加参数。该网站至少有四到五个解决方案。

答案 1 :(得分:0)

我面临着同样的问题。我试图发送带有空主体的POST请求,但该请求被服务器拒绝,返回411。

然后我在'sun.net.www.protocol.http.HttpURLConnection'中找到了以下代码,它是'java.net.HttpURLConnection'的实现:

  private static final String[] restrictedHeaders = new String[]{"Access-Control-Request-Headers", "Access-Control-Request-Method", "Connection", "Content-Length", "Content-Transfer-Encoding", "Host", "Keep-Alive", "Origin", "Trailer", "Transfer-Encoding", "Upgrade", "Via"};

因此,当您通过sun.net.www.protocol.http.HttpURLConnection.setRequestProperty设置标题时,如果密钥包含在上面的数组中,它将被忽略。这就是为什么手动设置“ Content-Length”不起作用的原因。

答案 2 :(得分:0)

虽然答案可能为时已晚,但仅供参考。 我遇到了完全相同的问题,由于已经提到的原因,我一直遇到同样的错误。

我通过发送一个空的正文设法解决了这个问题:

  conn.setDoOutput(true);
    try (OutputStream os = conn.getOutputStream()) {
        byte[] input = "".getBytes("utf-8");
        os.write(input, 0, input.length);
    }

这为我解决了问题。如前所述,手动设置 Content-Length 标头无济于事。