繁体   English   中英

是否可以使用普通套接字连接发送HTTP请求并接收不带标题的响应?

[英]Is it possible to send HTTP request using plain socket connection and receive response without headers?

专家

我正在尝试实现一个处理HTTP协议的下载器,我能够使用以下代码发送HTTP请求:

StringBuilder request = new StringBuffer().append("GET ").append(uri.getPath());
if(uri.getQuery() != null)
    request.append('?').append(uri.getQuery());
request.append(" HTTP/1.1\nHost: ").append(uri.getHost()).append("\nAccept: */*\n\n");

// send the request
outputStream.write(request.toString().getBytes("utf-8"));
outputStream.flush();

收到响应后,我需要将响应的主体保存到磁盘,然后完成工作。

我的问题是:是否可以为请求设置任何HTTP标头,这将导致服务器发送没有HTTP标头(仅正文)的响应?

我问这个问题的原因是,如果可能的话,在读取响应时不需要手动跳过HTTP标头,则可以直接开始从输入流中读取原始字节。 我想要的只是响应的主体,在这种情况下,HTTP标头并不重要。

如果您不控制服务器,则可能不会。 如果这样做,则取决于您使用服务器端的内容,您也许可以发送不带标题的响应。

看来您使用的是Java,而且我怀疑有库可以帮助您提取响应而不自己解析。 这比尝试合并没有标题的响应要好。

HTTP协议正在工作。 您总是会得到标题作为响应。 我很确定,Java在某个地方可以使用http客户端。 我建议您使用它。

不,您将始终获得标题。 而且,由于要尝试检索的资源可能采用不同的编码和/或多个部分,因此您必须对其进行解析。

另一方面,已经通过wget(1)类的工具为您完成了此操作。 您可以只使用它们,也可以查看源代码来找出您需要以编程方式进行的操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM