java - URL.openConnection() 第二次返回已经打开的连接

标签 java scala httpurlconnection

我正在使用 Scala 开发网站抓取应用程序。我正在抓取的网站在很大程度上是面向 session 的,因此我必须先访问该网站一次以获取 session ID,然后才能执行其他任何操作。

我像这样获取用于检索 session ID 的连接:

url.openConnection().asInstanceOf[HttpURLConnection]

它工作正常。返回的 HttpURLConnection 的 .connected 字段为 false,当我对其调用 .connect() 时它变为 true。没问题。

当我完成连接并对其调用 .disconnect() 时,第一个问题出现了。 .connected 字段保持为真。嗯。

所以现在我有了我的 session ID,然后我去获取具有我想要的表单的页面。我叫

url.openConnection().asInstanceOf[HttpURLConnection]

再次,就像上次一样——实际上是相同的代码——除了这次它给我的 HttpURLConnection 将 .connected 字段设置为 true!起初我以为它以某种方式给我它以前给我的相同对象,但不,内存 ID 不同。

当然,现在当我在连接上调用 .setRequestProperty() 时,它会因 IllegalStateException: Already connected 而爆炸。

我是否误解了如何使用 HttpURLConnection?

注释:Scala 2.9.2,Java 6.0。此外,我调用 .openConnection() 的 URL 对象是不同的对象,不相同。

谢谢...

最佳答案

这叫连接池,就是为了HTTP Keep-alive。很好。你想要它。如果确实不这样做,请调用 disconnect() 方法。

关于java - URL.openConnection() 第二次返回已经打开的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12612214/

相关文章:

java - 使用枚举作为参数

scala - 处理 Spark 中的模式不匹配

scala - Encoders.product[of a scala trait].schema in spark

java https 连接和安全弹出窗口

java - HttpURLConnection 和浏览器连接之间的区别

java - 如何检查Java字符是否为货币符号

java - 任何网站/书籍/技巧来练习递归和 OO 设计?

postgresql - 使用 Set[Int] 参数光滑编译查询

java - 如何终止 BufferedInputStream .read() 调用

java - 如何在内存中创建一个新的 java.io.File?