If you want to write the code to parse it yourself, start by looking at the HTTP spec for this. This will give you the grammar:
generic-message = start-line
*(message-header CRLF)
CRLF
[ message-body ]
start-line = Request-Line | Status-Line
So the first thing I would do is use split() on CRLF to break it into the composite lines. Then you can iterate through the resulting vector. Until you get to an element that is a blank CRLF, you are parsing a header, so you split on the first ':' to get the key and value.
Once you hit the empty element, you are parsing the response body.
Warning: having done this myself in the past, I can tell you not all webservers are consistant about the line endings (you may find only a CR or only an LF in places) and not all browsers / other layers of abstraction are consistant with what they pass to you. So you may find extra CRLFs in places you wouldn't expect or missing CRLFs in places you would expect them. Good luck.