Java 从缓冲区中排除HTTP/1.1头

Java 从缓冲区中排除HTTP/1.1头,java,http,sockets,Java,Http,Sockets,我想用socket下载一个图像。我目前能够做到这一点,但传入的HTTP/1.1头是唯一的问题。是否有一种简单的方法从缓冲区中排除这些头,以便文件内容只包含加密的图像 void readImage() throws IOException { socket = new Socket("wlab.cs.bilkent.edu.tr", 80); DataOutputStream bw = new DataOutputStream(new DataOutputStream(socke

我想用socket下载一个图像。我目前能够做到这一点,但传入的HTTP/1.1头是唯一的问题。是否有一种简单的方法从缓冲区中排除这些头,以便文件内容只包含加密的图像

void readImage() throws IOException
{
    socket = new Socket("wlab.cs.bilkent.edu.tr", 80);

    DataOutputStream bw = new DataOutputStream(new DataOutputStream(socket.getOutputStream()));
    bw.writeBytes("GET /~alper/pa2/images/ref2.jpg HTTP/1.1\n");
    bw.writeBytes("Host: wlab.cs.bilkent.edu.tr:80\n\n");

    File file = new File("img20.jpg");
    file.createNewFile();

    FileOutputStream fos = new FileOutputStream(file);

    DataInputStream in = new DataInputStream(socket.getInputStream());
    DataOutputStream dos = new DataOutputStream(fos);

    int count;

    byte[] buffer = new byte[8192];
    while ((count = in.read(buffer)) > 0)
    {
      dos.write(buffer, 0, count);
      dos.flush();
    }
    dos.close(); 

    System.out.println("image transfer done");
    socket.close();     
}
下载的图像顶部包含以下行:

HTTP/1.1 200 OK
Date: Fri, 30 Dec 2011 18:30:50 GMT
Server: Apache/2.2.3 (Debian) mod_jk/1.2.18 mod_python/3.2.10 Python/2.4.4 PHP/5.2.0-8+etch4 mod_ssl/2.2.3 OpenSSL/0.9.8c mod_perl/2.0.2 Perl/v5.8.8
Last-Modified: Tue, 20 Dec 2011 19:12:23 GMT
ETag: "502811-6b0e-4b48ad8d273c0"
Accept-Ranges: bytes
Content-Length: 27406
Content-Type: image/jpeg

标题以一个空行结尾。

您不能用它来代替处理HTTP协议的麻烦吗

然后,您可以自由地只处理HTTP消息体中自己的数据

但是@Skip Head是正确的,头以
CRLF
结尾。请参阅HTTP规范中的以下内容


是的,但在通过套接字处理此任务时,我需要找到一种不在文件中包含头的方法。HttpURLConnection或类似的内置类可能是替代方案,但对我没有帮助。无论如何,谢谢。好的,然后读取数据,直到得到CRLFCRLF(CRLF x 2)。接下来是HTTP消息体。但是请注意,理论上这个身体可以被编码,可能不是你想要的原始数据。例如,分块-。这就是为什么我推荐一个专用的HTTP类/库。只是好奇,为什么您不觉得HttpURLConnection有用?它有很多功能,比如自动重试和连接池,可以提高应用程序的可靠性。
    generic-message = start-line
                      *(message-header CRLF)
                      CRLF
                      [ message-body ]
    start-line      = Request-Line | Status-Line