在HttpURLConnection中设置setChunkedStreamingMode无法将数据传递到服务器

时间:2013-04-09 22:42:42

标签: java android apache httpurlconnection

我的开发机器上的服务器版本如下:

  

Apache / 2.2.21(Win32)mod_fcgid / 2.3.6

我一直在测试HttpURLConnection因为我的项目需要简单的流媒体功能。我已经阅读了@BalusC关于如何使用该课程的精彩概要。

  

Using java.net.URLConnection to fire and handle HTTP requests

我目前遇到的麻烦是设置setChunkedStreamingMode时。无论我将其设置为,我的流似乎都没有进入服务器当我的服务器api方法/连接被调用/制作时,数据流是空的。但是,如果我删除它,它可以正常工作。

我见过另一个有类似问题的人:

  

Java/Android HttpURLConnection setChunkedStreamingMode not working with all PHP servers

但没有真正的解决方案。我无法将其设置为setFixedLengthStreamingMode,因为内容(json)的长度可变。

这不行。我可能会传输非常大量的数据,因此无法将数据存储在内存中。

我的问题是,如何才能让setChunkedStreamingMode发挥得更好?它是服务器设置问题还是可以在代码中修复?

修改 我现在已经在我的生产服务器上测试了我的代码,它没有问题。但是,我仍然想知道为什么我本地计算机上的Apache服务器出现故障。任何帮助仍然非常感谢。

3 个答案:

答案 0 :(得分:1)

尝试添加此HTTP标头:

urlConnection.setRequestHeader("Transfer-Encoding","chunked");

我遇到了这样的问题:虽然我已经设置了分块的HTTP流模式(urlConnection.setChunkedStreamingMode(0)),但它不起作用,但将HTTP标头放在上面可以正常工作。

答案 1 :(得分:0)

我有类似的问题。在我的例子中,客户端系统安装了病毒扫描程序。那些扫描仪有时会有身份盗窃模块拦截POST,扫描身体然后传递它。

在我的情况下,BitDefender在传递之前缓存了大约5MB。

如果整个有效载荷较小,则POST作为非分块固定长度请求传送。

答案 2 :(得分:0)

我使用HttpURLConnection遇到了类似的问题。只需添加:

conn.setRequestProperty("connection", "close"); // disables Keep Alive

连接或禁用所有连接:

System.setProperty("http.keepAlive", "false");

关于disconnect()的API:

  

释放此连接,以便可以重复使用或关闭其资源。   与其他Java实现不同,这不一定会关闭可以重用的套接字连接。您可以通过在发出任何HTTP请求之前将http.keepAlive系统属性设置为false来禁用所有连接重用。