Вчерне, POST посылка выглядит так:
POST url HTTP/1.0
Content-length: ...
далее остальные заголовки по мере необходимости; затем, естественно,
пустая строка. После пустой строки, собственно данные запроса. Как
они организованы, зависит от скрипта. Если скрипт ожидает простую
форму, то нужен заголовок
Content-Type: application/x-www-form-urlencoded
и данные в виде строки
name1=value1&name2=value2&и т.д.
(все values, естественно, url-encoded).
Если нужно передать еще и файл, придется оранизовывать
form/multipart, что намного муторнее.
Заканчивать запрос надо опять-таки пустой строкой.
В любом случае Content-length должен быть посчитан с учетом последней
пустой строки и всех part boundaries если таковые имеются, и передан
серверу.
Кажется, все.