如果我创建一个HTTP java.net.URL 然后叫 openConnection() 上它,不一定意味着HTTP后将要发生?我知道, openStream() 意味着一个获得。如果那么,你如何执行其他一个HTTP动词而不具有与原插口层?

有帮助吗?

解决方案

如果你找回的 URLConnection 目的使用 openConnection() 它实际上并没有开始与服务器进行通信。这不会发生,直到你得到的流 URLConnection().当你第一次获得连接可以加入/更改的标题和其他连接性质之前,实际上打开它。

URLConnection的生命周期是有点奇怪。它不会发送的头服务,直到你已经得到了一个流。如果你刚刚得到的输入流那么我相信它做得到的,发送的头,然后可以让你读的输出。如果你得到输出流那么我相信它将其作为一个职位,因为它假定你会写给它的数据(你可能需要调用 setDoOutput(true) 对输出流到工作)。只要你得到的输入流出流关闭,等待答复的服务器。

例如,这应当做一个员额:

URL myURL = new URL("http://example.com/my/path");
URLConnection conn = myURL.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);

OutputStream os = conn.getOutputStream();
os.write("Hi there!");
os.close();

InputStream is = conn.getInputStream();
// read stuff here

同时这会做得到:

URL myURL = new URL("http://example.com/my/path");
URLConnection conn = myURL.openConnection();
conn.setDoOutput(false);
conn.setDoInput(true);

InputStream is = conn.getInputStream();
// read stuff here

URLConnection 还将做其他奇怪的事情。如果服务器指定一个内容,那么长 URLConnection 将保持基本输入流开,直到它收到的那么多数据 甚至如果你明确地接近它.这引起了许多问题对我们为它做关闭我们的客户下的干净的一个有点难,因为 URLConnection 将保持网络连接打开。这可能是可能存在即使你只是使用 getStream() 虽然。

其他提示

没有它没有。但如果协议的网址是HTTP,你会得到一个 HttpURLConnection 作为回报的对象。这类有一个 setRequestMethod 方法来指定这HTTP方法要使用。

如果你想要做的更复杂的东西你可能会更好使用图书馆喜欢 雅加达异常.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top