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

时间:2011-11-30 02:56:18

标签: java http sockets http-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标头并不重要。

3 个答案:

答案 0 :(得分:1)

如果你不控制服务器,那么可能不是。如果您这样做,那么根据您使用服务器端的内容,您可以发送没有标题的响应。

看起来你正在使用Java,我怀疑有些库可以帮助你提取响应而无需自己解析它。这比没有标题的黑客攻击更好。

答案 1 :(得分:1)

即HTTP协议正在运行。你总是得到标题作为回应。 我很确定,Java已准备好在某处使用http客户端。我建议你使用它。

答案 2 :(得分:1)

不,你总会得到回头。并且您将不得不解析它,因为您尝试检索的资源可能有不同的编码和/或多个部分。

另一方面,已经通过像wget(1)这样的工具为您完成了这项工作。您可以直接使用它们,也可以查看源代码以找出您需要以编程方式执行的操作。