我正在使用Scala中的网站抓取应用程序。我正在抓取的网站是面向会话的,因此我必须先访问网站一次以获取会话ID,然后我才能做其他事情。
我获得了检索会话ID的连接,如下所示:
url.openConnection().asInstanceOf[HttpURLConnection]
工作正常。返回的HttpURLConnection的.connected字段为false,当我调用.connect()时它会翻转为true。没问题。
当我完成连接并在其上调用.disconnect()时,会出现第一个故障提示。 .connected字段保持为真。 HM。
所以现在我有了会话ID,然后我去获取具有我想要的表单的页面。我打电话给
url.openConnection().asInstanceOf[HttpURLConnection]
再次,就像上次一样 - 实际上是相同的代码 - 除了这次它给我的HttpURLConnection将.connected字段设置为true!我一开始以为它以某种方式给了我之前给我的相同对象,但不,内存ID不同。
当然,现在当我在连接上调用.setRequestProperty()时,它会因为IllegalStateException而爆炸:已经连接。
我是否误解了如何使用HttpURLConnection?
注意:Scala 2.9.2,Java 6.0。另外,我调用.openConnection()的URL对象是不同的对象,不一样。
...谢谢
答案 0 :(得分:1)
它被称为连接池,用于寻求HTTP Keep-alive。很好。你想要它。如果你真的没有,请调用disconnect()
方法。
答案 1 :(得分:1)
答案 2 :(得分:0)
听起来HttpUrlConnection对你来说是keeping the connection alive。
请查看at this article以获取强制关闭连接的一些提示,而不是过度帮助。
虽然在你的情况下听起来你可能想要使用keep-alive,因为它可以通过避免不必要的连接握手来加快你对网站的调用。