1

我想查找没有 HTTP 标头和数据传输速率的 HTML 文件的大小。以下是我的代码;

import java.net.*;
import java.io.*;

public class HttpCon 
{
  public static void main ( String[] args ) throws IOException 
  {
    Socket s = null;

    try 
    {
        String host = "host1";
        String file = "file1";
        int port = 80;

        s = new Socket(host, port);

        OutputStream out = s.getOutputStream();
        PrintWriter outw = new PrintWriter(out, false);
        outw.print("GET " + file + " HTTP/1.1\r\n");
        outw.print("Host: " + host + ":" + port + "\r\n");
        outw.print("Accept: text/plain, text/html, text/*\r\n");
        outw.print("\r\n");
        outw.flush();           

        InputStream in = s.getInputStream();
        InputStreamReader inr = new InputStreamReader(in);
        BufferedReader br = new BufferedReader(inr);
        String line;

        while ((line = br.readLine()) != null) 
        {
                System.out.println(line);
        }
        br.close();       

    } 

  }
} 

但我不知道如何做到这一点。是否有我可以查看的源代码或我可以应用的任何资源?

任何帮助将不胜感激,在此先感谢。

4

1 回答 1

0

你所要求的应该不是什么大问题。阅读这些行,直到你读到一个空行——那是标题结束的地方。之后继续阅读并计算你读过的所有字符,这就是你的文件大小。至于传输率:

final long start = System.nanoTime();
long charsRead = 0;
... do the transfer, counting chars ...
System.out.println("Transfer rate: " + 
  (charsRead / (1e-6 * (System.nanoTime() - start))));

这里唯一的问题是您使用的是 aBufferedReader所以您计算的是字符而不是字节。如果您需要字节,那么您将需要使用原始数据InputStream,然后找到标题结束的位置会有点痛苦。您可以通过使用 not the BufferedReaderbut the来解决这个问题(可能) InputStreamReader,它不会预读任何内容。当您找到标头的结尾时,切换到原始InputStream以读取响应正文。

于 2012-04-22T16:48:42.937 回答