如果我创建一个 HTTPjava.net.URL
然后打电话openConnection()
上面的内容是否一定意味着将要发生 HTTP post?我知道openStream()
意味着 GET。如果是这样,如何在不使用原始套接字层的情况下执行其他 HTTP 动词之一?
如果您检索到URLConnection
对象使用openConnection()
它实际上并没有开始与服务器通信。直到您从URLConnection()
。当您第一次获得连接时,您可以在实际打开连接之前添加/更改标头和其他连接属性。
URLConnection 的生命周期有点奇怪。在您获得其中一个流之前,它不会将标头发送到服务器。如果您只是获取输入流,那么我相信它会执行 GET,发送标头,然后让您读取输出。如果您获得输出流,那么我相信它会将其作为 POST 发送,因为它假设您将向其中写入数据(您可能需要调用setDoOutput(true)
以使输出流正常工作)。一旦获得输入流,输出流就会关闭并等待服务器的响应。
例如,这应该执行 POST:
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
虽然这会执行 GET:
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()
though.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)