QIODevice::readyRead() is signalled when there is data available to be read, not when all the data is ready to be read. To get the entire response in one hit you should readAll() in the finished() signal handler (if there has been no error). You can, if you wish, accumulate portions of the response each time readyRead() is signaled and use finished() only to finalise things (e.g. writing a huge file to disk piece by piece, then closing it).

Since "399" is not a standard HTTP response code we can only assume this is the error returned by QNetworkReply::error(). The error message is self-explanatory:
QNetworkReply::ProtocolFailure 399 a breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.)
This implies that the server is doing something unexpected in the response but we have no information to go on. Did you write the server code too?