如何在java中从http响应中获取图像?

时间:2017-05-02 18:05:31

标签: java sockets http networking

我想通过手动发出http请求从服务器获取图像。我建立一个连接,创建一个http请求等待,从服务器获取http回复,然后我想在其中的数据。我从数据中分离标题并将其保存到扩展名为“.jpeg”的文件中。但我的.jpeg文件无法打开。我该怎么办?

注意:我无法使用任何插件或库。我只能处理http请求!

这是我的代码:

try (Socket socket = new Socket("ceit.aut.ac.ir", 80)) {

        // send an HTTP request to the web server
        DataOutputStream outToServer = new DataOutputStream(socket.getOutputStream());
        BufferedReader inFromServer = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        outToServer.writeBytes("GET /~94131090/CN1_Project_Files/flower.jpeg  HTTP/1.1\r\n");
        outToServer.writeBytes("Host: ceit.aut.ac.ir:80\r\n");
        outToServer.writeBytes("Connection: Close\r\n");
        outToServer.writeBytes("Content-Type:image/*\r\n");
        outToServer.writeBytes("\r\n");
        // Receive an HTTP reply from the web server
        boolean loop = true;
        StringBuilder sb = new StringBuilder();
        while (loop) {
            if (inFromServer.ready()) {
                int i = 0;
                while (i != -1) {


                    i = inFromServer.read();
                    sb.append((char) i);
                }
                loop = false;
            }
        }

        //Download Image
        String data = separate(sb.toString());
        //???

        socket.close();

    } catch (IOException e) {
        e.printStackTrace();
    }

这是我的独立功能:

public String separate(String str){
    String msg = str;

    int index = msg.indexOf("close");

    // "close" and blank end of http response line including \r\n
    // 3(close) + 2(\r) + 2 (\n) + 2 (\r) + 2 (\n) = 4 + 2 + 2 + 2 = 6

    return msg.substring(index+11);

}

0 个答案:

没有答案