>>501見当違いかも知れ無いですが受信部分です。outputはstring型です
INTERNET_BUFFERS inetbufs;
::memset(&inetbufs, 0, sizeof(INTERNET_BUFFERS));
inetbufs.dwStructSize = sizeof(INTERNET_BUFFERS);
do
{
inetbufs.lpvBuffer = datatop;
inetbufs.dwBufferLength = BUFSIZE;

BOOL ret = InternetReadFileEx(hfile, &inetbufs, IRF_ASYNC, (DWORD)this);
if(!ret)
{
if(::GetLastError() == ERROR_IO_PENDING)
return;
goto READERROR;
}
if(!inetbufs.dwBufferLength)
break;
output.append(datatop, inetbufs.dwBufferLength);
} while(true);
↑はGETときも同じ処理なんですが、このときはメッセージはきちんと取得できます。
メッセージが壊れるのはPOSTのときだけで、後関係有るのかわかりませんがPOSTを送った後サーバからHTTP_STATUS_REDIRECTが返って来て自動でRedirectしてました。