Java 检测可使用HTTP请求访问的url
首先是我理解的事情: 1) 我可以发送HTTP HEAD请求,200/2XX响应代码意味着可以在那里访问内容 2) 我可以发送一个带有“Range”头的HTTPGET请求,206响应代码表示内容是可访问的 但是,如果给定的服务器不支持HEAD请求,并且不符合Range头,更重要的是,特定文件是一个非常大的文件。检查文件是否可访问的最佳方法是什么?显然,我不想等待10分钟整个文件被下载 我在Google AppEngine上使用Java和basicJava 检测可使用HTTP请求访问的url,java,google-app-engine,http-headers,httprequest,httpurlconnection,Java,Google App Engine,Http Headers,Httprequest,Httpurlconnection,首先是我理解的事情: 1) 我可以发送HTTP HEAD请求,200/2XX响应代码意味着可以在那里访问内容 2) 我可以发送一个带有“Range”头的HTTPGET请求,206响应代码表示内容是可访问的 但是,如果给定的服务器不支持HEAD请求,并且不符合Range头,更重要的是,特定文件是一个非常大的文件。检查文件是否可访问的最佳方法是什么?显然,我不想等待10分钟整个文件被下载 我在Google AppEngine上使用Java和basicHttpUrlConnection,因此某些特定的
HttpUrlConnection
,因此某些特定的库可能无法在此平台上运行
我正在考虑最好的方法是发出GET请求,并在第一个字节得到回复后终止它。但是,我找不到通过使用HttpUrlConnection
实现这一点的方法
如果您能在这里给出一些提示,我们将不胜感激。请在阅读响应代码后尝试
HttpURLConnection.disconnect()
服务器在发送大文件时,会从客户端接收RST,并中止其连接。谢谢@zhong.j.yu,我也考虑过同样的事情,但调用connection.getResponseCode()后发生的情况是,线程将一直运行,直到检索到所有内容。除非我在这里使用多线程并使用另一个线程来监视和调用disconnect(),否则我认为这不是一个可行的解决方案。断开连接应该能够释放一切。是的,它将释放一切,但只有在接到呼叫后。问题是,即使只调用connection.getResponseCode(),在内容完全下载之前也不会调用它。getResponseCode()似乎只需要响应头,而不需要响应体。所以它应该在不下载全部内容的情况下快速返回。事实上,至少从我的测试来看,情况并非如此。一旦您初始化连接并发出获取请求,只要套接字已连接,服务器就会开始“推出”内容。可能您可以尝试
GET
plus,如果在标题中添加了一个未来日期(?)。如果内容存在且未被修改,它将以304响应。这可能不适用于服务器端动态生成的内容。但您提到它们是特定的文件,所以,它很可能在服务器上有最后修改的时间戳。