发送Java POST请求而不调用getInputStream()

时间:2011-09-20 07:58:57

标签: java post io

我想用Java发送POST请求。目前,我这样做:

URL url = new URL("myurl");
URLConnection con = url.openConnection();
con.setDoOutput(true);
PrintStream ps = new PrintStream(con.getOutputStream());
ps.println("key=" + URLEncoder.encode("value"));
// we have to get the input stream in order to actually send the request
con.getInputStream();  
ps.close();

我不明白为什么我必须调用con.getInputStream()才能实际发送请求。如果我不打电话,则不会发送请求。

使用PrintStream有问题吗?如果我使用PrintStream,PrintWriter或其他东西,这没关系,对吧?

3 个答案:

答案 0 :(得分:0)

网址代表一些来源。

URLConnection表示与资源的连接。

您需要调用connection.connect()来连接连接

答案 1 :(得分:0)

在写入输出之前尝试添加

con.setDoInput (false);

P.S。:你也应该像swanliu所说的那样打电话给con.connect()。

更新
这就是我想出来的


    private static final void sendPostRequest (final String urlAddress, String key, String value) throws Exception
    {
        URL url = new URL (urlAddress);
        URLConnection con = url.openConnection ();
        con.setDoOutput (true);
        con.setDoInput (false);
        PrintStream ps = new PrintStream (con.getOutputStream ());
        ps.println (key + "=" + URLEncoder.encode (value, "UTF-8"));
        ps.flush ();
        con.connect ();
        ps.close ();
    }

我检查了WireShark是否正在建立tcp连接并关闭。但不知道检查服务器是如何收到请求的。 如果您有快速检查方法,可以尝试使用该代码。

答案 2 :(得分:0)

我认为另一个帖子的帖子回答了我的问题。对不起,但我发现为时已晚。你可以找到它here

PS:不幸的是,Stackoverflow将我对问题的最后答案添加为评论,因为我的答案太短了。并且不可能将评论标记为正确的答案......希望这个评论足够长: - )