你如何在Java中执行http帖子?

时间:2011-11-14 18:06:26

标签: java http post

这是我正在使用的代码。它不是将数据发布到页面,而是像常规文本文件一样下载它。所以,我实际上是在返回html代码并且没有提交表单。

我知道html表单有效。如果我在浏览器中打开它,我可以发布到它,我的数据出现在我的数据库中。我猜我错过了一个参数或其他东西。

public void testComm ()
{
try
    {
    URL         url;
    URLConnection   urlConn;
    DataOutputStream    printout;
    DataInputStream input;

    url = new URL ("http://mysite.com/myform.html");

    // URL connection channel.
    urlConn = url.openConnection();

    // Let the run-time system (RTS) know that we want input.
    urlConn.setDoInput (true);

    // Let the RTS know that we want to do output.
    urlConn.setDoOutput (true);

    // No caching, we want the real thing.
    urlConn.setUseCaches (false);

    // Specify the content type.
    urlConn.setRequestProperty
    ("Content-Type", "application/x-www-form-urlencoded");

    // Send POST output.
    printout = new DataOutputStream (urlConn.getOutputStream ());

    String content =
    "txtLevelName=" + URLEncoder.encode ("level1") +
    "&txtLevelData=" + URLEncoder.encode ("abcd");

    printout.writeBytes (content);
    printout.flush ();
    printout.close ();

    // Get response data.
    input = new DataInputStream (urlConn.getInputStream ());

    String str;
    while (null != ((str = input.readLine())))
    {
    System.out.println (str);
    }

    input.close ();

    }
catch (MalformedURLException me)
    {
    System.err.println("MalformedURLException: " + me);
    }
catch (IOException ioe)
    {
    System.err.println("IOException: " + ioe.getMessage());
    }
}   

4 个答案:

答案 0 :(得分:8)

您已经发送了POST请求。它是urlConn.setDoOutput(true),它将请求方法设置为POST。显然,您正在将请求发送到错误的网址。在浏览器中打开HTML页面。右键单击并查看源。在HTML源代码中找到HTML <form>元素。它应该看起来像:

<form action="http://mysite.com/somescript" method="post">

检查其action属性。这就是您必须发布到的URL。

另见:

答案 1 :(得分:3)

可能你做得不对。看起来您将其发布到表单而不是操作。

答案 2 :(得分:2)

我正在做什么(我知道有这样的框架,但我希望它很轻):

        final HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        if(!postString.isEmpty()) {
            connection.setRequestMethod("POST");
            connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            connection.setRequestProperty("Content-Length", Integer.toString(postString.getBytes().length));
            connection.setUseCaches(false);
            connection.setDoInput(true);
            connection.setDoOutput(true);

            final OutputStreamWriter wr = new OutputStreamWriter(connection.getOutputStream());
            wr.write(postString);
            wr.flush();
            wr.close();
        }

postString与您的内容字符串相同

//编辑:哦和上面提到的sid:你的网址是一个html页面???

答案 3 :(得分:2)

您可以尝试 jsoup http://jsoup.org/

它非常易于使用:

Document doc = Jsoup.connect("http://example.com")
  .data("query", "Java")
  .post();

从网址加载文档: http://jsoup.org/cookbook/input/load-document-from-url