我有以下代码来读取由以下url指向的资源的内容长度响应头,但是此代码没有读取内容长度并返回-1。我想知道为什么。
try{
String song_url = "https://doc-0c-6o-docs.googleusercontent.com/docs/securesc/mtop3kcd4g9holc81thpce8mmck772ja/10to2su90o897bl390ojai9srph2fmvq/1407182400000/15635312626103908265/15635312626103908265/0B8CobC-HnuclMm5sUnVpOW13eEk?e=download&h=16653014193614665626&nonce=5beqd4pl58o30&user=15635312626103908265&hash=qbqjjhkrpco10b8ggu7ko5qa5c64th2m";
URL web = new URL(song_url);
con1 = web.openConnection();
total_size = con1.getContentLength();
((HttpURLConnection)con1).disconnect();
return total_size;
}
catch(Exception e){
e.printStackTrace();
}
((HttpURLConnection)con1).disconnect();
现在,奇怪的是,如果您只是将此网址粘贴到浏览器中
然后在inspect元素>下谷歌浏览器中的网络然后您将看到浏览器正确读取内容长度。
内容长度:79476777
但为什么java代码无法读取内容长度?这是我正在使用的库的问题吗?谢谢你的帮助!
答案 0 :(得分:3)
那是因为服务器没有发送Content-length头。它至少还有两种方式可以传达这个长度:
在发送请求正文后关闭套接字。在HTTP 1.1中,我认为这必须伴随着一个连接:关闭'头。在这种情况下,内容长度是正文的长度,你必须全部阅读以测量它。
使用分块传输编码。在这种情况下,内容长度是块长度的总和。再次,您必须阅读所有内容以确定长度。