Ani's solution isn't going to cut it for you, because your problem isn't about streaming it in, but rather getting access to the original, protocol-level chunks. Unless the metadata is added to the returned headers, which I suspect is not the case, your only choice might be to drop down to the socket level and implement your own HTTP client code. Depending on how mich you can constrain the functionality and your own comfort with protocols, this might not be so hard.
edit
If you opened up a socket, sent a well-formed HTTP 1.1 request and then read everything back, you would find the initial response headers followed by some number of chunks. Each chunk has its mini-header, followed by the associated data. If you want information in those mini-headers, it's there for you, but you'd have to parse it all out for yourself, just as you'd have to parse the response header. These details are all handled for you when you use a high-level protocol class, but then again, the details are also hidden from you, which is a problem for your special needs.
Now, if you were to read up to and including the first chunk header, it would contain the length of that chunk, so you'd know exactly how many bytes you can read until the end of the chunk. I believe, but I'm not certain, that if you tried to read past the end of that chunk and the next chunk wasn't sent, Socket.Receive
would read as much as it can and return the actual byte count. In any case, if you were careful, you would be able to start processing the first chunk while the second was still being sent.
Does that help?