Java URL连接未读取内容长度

Java URL连接未读取内容长度,java,urlconnection,content-length,http-content-length,Java,Urlconnection,Content Length,Http Content Length,当打开URLConnection时,我使用以下代码来获取内容长度,但是它返回-1 URL url = new URL(sUrl[0]); URLConnection connection = url.openConnection(); connection.connect(); int fileLength = connection.getContentLength(); 然后我假设服务器没有设置内容长度头(并且连接对象中的dig确认值为-1),因此我自己在PHP中使用以下命令设置一个: he

当打开URLConnection时,我使用以下代码来获取内容长度,但是它返回-1

URL url = new URL(sUrl[0]);
URLConnection connection = url.openConnection();
connection.connect();
int fileLength = connection.getContentLength();
然后我假设服务器没有设置内容长度头(并且连接对象中的dig确认值为-1),因此我自己在PHP中使用以下命令设置一个:

header('Content-Length: '.strlen($output));
当我打印出strlen($output)的值时,我得到了正确的值,但是这个头似乎并没有写入Java

需要任何建议或进一步的代码吗?
谢谢

如果确实从您连接的服务器将内容长度标题发送回您,那么您的代码将正常工作。您可以通过点击一个返回内容长度的简单web服务来证明这一点,如以下代码所示:

URL url = new URL("http://freegeoip.net/json/199.201.1.200");
URLConnection connection = url.openConnection();
int fileLength = connection.getContentLength();    
System.out.println(fileLength);

当您运行此命令时,您将看到它打印出内容长度

传输编码
设置为
分块
时,应该忽略
内容长度
。看起来,我的web主机更进一步,并完全删除了标题,即使我在PHP中手动设置它。Chrome的高级REST应用程序证实了这一点。

您是否尝试过使用更具目的性的HTTP库,如Apache的HTTPClient?这是一个非常好的库+1您是否尝试过使用Wireshark之类的工具嗅探请求,以便确认标头是由服务器发送的?我注意到您错过了
connection.connect()这是故意的还是只是一个打字错误?故意的。从文档中:
依赖于连接的操作,如getContentLength,将在必要时隐式执行连接。