2011-11-30 54 views
0

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

我想实现它处理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标头并不重要。

+1

否!!!!!!!!!!!!!! – undone

+1

你会想要标题。它们显示请求是否成功处理。 –

+1

更不用说如何读取响应正文,因为它可能以几种不同的方式之一发送,因为您发送的是HTTP 1.1请求。 –

回答

1

不,你总是会回头。而且你将不得不解析它,因为你试图检索的资源可能以不同的编码和/或多个部分。

另一方面,这已经由wget(1)等工具为您完成。您可以使用它们,或者查看源代码以找出需要以编程方式执行的操作。

+0

感谢您的全部答复,我会尽力自己解析〜 – neevek

+0

艰难的任务。我的java很生锈,但是不能使用'java.net.URL'或类似的东西呢? –

+0

是的,我可以使用java.net.HttpURLConnection来下载文件。但我认为普通的套接字可能会给我更好的表现^ _ ^ – neevek

1

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

它看起来像你正在使用Java,我怀疑有库可以帮助你提取响应而不用自己解析它。这会比试图将没有标题的响应拼凑在一起更好。

1

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

相关问题