1

我想知道如何读取带有传输编码分块的http响应。
我写了一个我正在做的例子。我遇到的一个问题是,即使还有更多内容要阅读但在流中仍然不可用,它也会clientStream.DataAvailable返回。 欢迎就我的处理方式提出其他建议:false

StringBuilder response = new StringBuilder();

TcpClient tcpClient = new TcpClient("www.google.com", 80);

string request = "GET http://www.google.com/ HTTP/1.1\r\n";
request += "Host: www.google.com\r\n";
request += "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0\r\n";
request += "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
request += "Accept-Language: en-US,en;q=0.5\r\n";
request += "Accept-Encoding: gzip, deflate\r\n";
request += "Connection: keep-alive\r\n\r\n";

byte[] requestBuffer = Encoding.ASCII.GetBytes(request);
NetworkStream clientStream = tcpClient.GetStream();
clientStream.Write(requestBuffer, 0, requestBuffer.Length);

// Check to see if this NetworkStream is readable.
if (clientStream.CanRead)
{
    byte[] readBuffer = new byte[4096];
    int numberOfBytesRead = 0;

    // Incoming message may be larger than the buffer size.
    do
    {
        numberOfBytesRead = clientStream.Read(readBuffer, 0, readBuffer.Length);

        response.Append(Encoding.ASCII.GetString(readBuffer, 0, numberOfBytesRead));
    }
    while (clientStream.DataAvailable);
}

clientStream.Close();
tcpClient.Close();

Console.Write(response.ToString());

先感谢您。

4

0 回答 0