Java 新的URL(…).openConnection()是否一定意味着一篇文章?

Java 新的URL(…).openConnection()是否一定意味着一篇文章?,java,http,url,Java,Http,Url,如果我创建了一个HTTPjava.net.URL,然后对其调用openConnection(),这是否一定意味着将发生HTTP post?我知道openStream()意味着一个GET。如果是这样,您如何在不使用原始套接字层的情况下执行其他HTTP谓词之一?不,不需要。但是,如果URL的协议是HTTP,您将得到一个作为返回对象的。此类有一个setRequestMethod方法来指定要使用的HTTP方法 如果您想做更复杂的事情,最好使用库,如。如果您使用openConnection()检索URLC

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

不,不需要。但是,如果URL的协议是HTTP,您将得到一个作为返回对象的。此类有一个
setRequestMethod
方法来指定要使用的HTTP方法


如果您想做更复杂的事情,最好使用库,如。

如果您使用
openConnection()
检索
URLConnection
对象,它实际上不会开始与服务器通信。在从
URLConnection()
获取流之前,不会发生这种情况。首次获得连接时,可以在实际打开之前添加/更改头和其他连接属性

URLConnection的生命周期有点奇怪。在您获得其中一个流之前,它不会将头发送到服务器。如果您只是获取输入流,那么我相信它会执行get,发送标题,然后让您读取输出。如果您得到了输出流,那么我相信它会将其作为POST发送,因为它假定您将向其写入数据(您可能需要调用
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()
,也可能存在这种情况