检测http响应结束的简单方法(原始套接字,java)?

时间:2014-09-04 09:58:12

标签: java android sockets

我希望按原样检索服务器的响应,包含所有标头。首先想到的是使用原始套接字。正如我从搜索中学到的,有三种方法可以表明响应的结束:

(1)关闭连接;
(2)审查Content-Length;
(3)在Transfer-Encoding: Chunked的情况下得到所有块。
还有
(4)超时方法:假设超时意味着数据结束,但后者实际上并不可靠。

我想要一个通用案例解决方案而不想
在请求中添加Connection: close行。

此外,建议使用现有的库而不是重新发明轮子。

问题:

如何使用现有的软件包(最好是Android中已存在的软件包)来检测HTTP响应的结束,同时对原始数据流进行访问(不受干扰)? < /强>

UPD:忘了提到HTTP请求是作为一个字节序列给我的。是的,它是用于测试的。

PS
相关阅读:
End of an HTTP Response
Detect the end of an HTTP Request in Java
Detect end of HTTP request body
How HTTP Server inform its clients that the response has ended
Proper handling of chuncked Http Response within Socket
Detect the end of a HTTP packet
Android socket & HTTP response headers
Java HTTP GET response waits until timeout

1 个答案:

答案 0 :(得分:0)

我建议使用Apache HTTP客户端软件包(http://hc.apache.org/httpclient-3.x/),这样您就不需要实现HTTP协议的所有详细信息。

Apache Http Client将允许您访问标题及其内容,这对您来说已经足够了。

如果您确实需要访问服务器发送的实际字符序列(例如用于调试目的),则可以通过用您自己的连接套接字工厂替换连接套接字工厂来拦截通信,以创建&#34;拦截&#34;套接字,用于存储缓冲区中传输的所有数据,以便您的代码稍后可以访问它。见http://hc.apache.org/httpcomponents-client-4.3.x/tutorial/html/connmgmt.html#d5e418