我想用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或其他东西,这没关系,对吧?
答案 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将我对问题的最后答案添加为评论,因为我的答案太短了。并且不可能将评论标记为正确的答案......希望这个评论足够长: - )