为什么java不读取内容长度响应头?
我有下面的代码来读取由下面的url指向的资源的内容长度响应头,但是这段代码不读取内容长度并返回-1。我想知道为什么为什么java不读取内容长度响应头?,java,networking,web,content-length,Java,Networking,Web,Content Length,我有下面的代码来读取由下面的url指向的资源的内容长度响应头,但是这段代码不读取内容长度并返回-1。我想知道为什么 try{ String song_url = "https://doc-0c-6o-docs.googleusercontent.com/docs/securesc/mtop3kcd4g9holc81thpce8mmck772ja/10to2su90o897bl390ojai9srph2fmvq/1407182400000/15635312626103908265/15635
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();
现在,奇怪的是,如果你只是将这个url粘贴到浏览器中
然后在google chrome的inspect element>network下,您将看到浏览器正确读取了内容长度
内容长度:79476777
但为什么java代码无法读取内容长度?这是我使用的图书馆的问题吗?谢谢你的帮助 这可能是因为服务器没有发送内容长度头。至少还有两种其他方式可以传达长度:
在获取内容长度之前,您必须
con1.connect()
。很抱歉,它仍然返回-1如果服务器使用HTTP分块,则在读取所有字节之前,您无法访问内容长度(这就是重点:允许未指定的内容长度,从而启用高级用例,例如动态gzip)。通常来说,ContentLength在HTTP上是不可靠的。但如果您在chrome“inspect element”>“network”中执行此步骤,浏览器显示它正在返回内容长度这是因为您的资源受密码保护。您的Java客户端被重定向到google的HTML登录页面。我认为服务器正在发送内容长度标题。正如我在上面的帖子中所提到的“然后在google chrome中的inspect element>network下,您将看到浏览器正确读取了内容长度”浏览器在响应字段中显示内容长度标题。正如@GPI在上面指出的,这不是您的Java客户端正在阅读的页面。它正在阅读一个登录页面,该页面显然没有内容长度标题发送。但如果您可以访问上面的链接,则我认为它不会重定向到登录页面。您可以随心所欲地想,但不必担心如果你试着和你的客户一起阅读内容,并在这里发布足够的内容来证明这一点,那只是你的猜测。现在我得到了一个登录屏幕。QED