// Read status line
String statusLine = readStatusLine(buffer);
System.out.println("StatusLine: " + statusLine); if (!statusLine.startsWith("HTTP/1.1")) { thrownew AssertionError("bad status line: " + statusLine);
}
// Wrap the buffer into an input stream and pass // that to MessageHeader to read the header. // We have two cases: // - MESSAGE_OK: there will be some headers to read, // - MESSAGE_NOK: there will be no headers to read.
ByteBufferInputStream bbis = new ByteBufferInputStream(buffer);
sun.net.www.MessageHeader mh = new sun.net.www.MessageHeader(bbis);
// Now get the expected length of the body
String contentLengthValue = mh.findValue("Content-length"); int contentLength = contentLengthValue == null ? 0
: Integer.parseInt(contentLengthValue);
// We again have two cases: // - MESSAGE_OK: there should be a Content-length: header // - MESSAGE_NOK: there should be no Content-length: header if (contentLengthValue == null) { // MESSAGE_NOK has no headers and no body and therefore // no Content-length: header. if (!MESSAGE_NOK.equals(msg)) { thrownew AssertionError("Content-length: header not found");
} // In that case we expect MessageHeader to read the CR but // leave the LF in the buffer. We therefore need to consume // the LF in order to get an empty (all consumed) buffer. // This is what ResponseHeaders does. byte c = buffer.get(); if (c != '\n' || bbis.lastRead != '\r') { thrownew AssertionError("Unexpected byte sequence for empty body"
+ ": " + bbis.lastRead + " " + c + " expected "
+ (byte)'\r' + " " + (byte)'\n');
}
} else { if (MESSAGE_NOK.equals(msg)) { thrownew AssertionError("Content-length: header found in"
+ " error 101 message");
}
}
// Now read the remaining bytes. It should either be // the empty string (MESSAGE_NOK) or BODY (MESSAGE_OK), // and it should not contains any leading CR or LF"
String remaining = readRemainingBytes(buffer);
System.out.println("Body: <<<" + remaining + ">>>"); if (remaining.length() != contentLength) { thrownew AssertionError("Unexpected body length: " + remaining.length()
+ " expected " + contentLengthValue);
} if (contentLengthValue != null) { if (!BODY.equals(remaining)) { thrownew AssertionError("Body does not match!");
}
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.