当前位置:  开发笔记 > 编程语言 > 正文

新的URL(...).openConnection()是否必然意味着POST?

如何解决《新的URL().openConnection()是否必然意味着POST?》经验,为你挑选了1个好方法。

如果我创建一个HTTP java.net.URL然后调用openConnection()它,它是否一定意味着HTTP帖子会发生?我知道这openStream()意味着GET.如果是这样,如何在不使用原始套接字层的情况下执行其他HTTP谓词之一?



1> Herms..:

如果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()它,这可能也许存在.

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有