Похоже, что метод Post этого компонента содержит существенный баг.
Я написал на ASP.NET тестовый сайт и решил отладить на нем. Посмотреть, что же посылает NMHTTP на самом деле. Так вот, выяснилось, что он посылает такую хрень:
POST /ErrorTest/Default.aspx HTTP/1.0
Content-Length: 57
Content-Type: application/x-www-form-urlencoded
Accept: image/x-rgb, image/x-xbm, image/gif, */*, application/postscript
Host: localhost
station%5Fid%3D1%26text%3D%E2%E0%F1%FF+%EF%F3%EF%EA%E8%ED
В данном случае я в качестве "параметров" пытался передать в метод компонента Post(url, s) такую строку:
s = 'station_id=1&text=вася пупкин.';
Из распечатки тела запроса видно, что компонент закодировал и знаки = и &, что, скорее всего, недопустимо. В результате сервер не смог распознать имен параметров. В результате в коллекции Request.Params оказался только один элемент, да еще и
с пустым именем, содержащий весь посланный текст 'station_id=1&text=вася пупкин.'.
В результате экспериментов с компонентом отсылку методом POST пришлось сделать вручную вот так:
var
sServer, s: string;
iPort: integer;
begin
sServer := 'localhost';
iPort := 1195;
NMHTTP1.Host:=sServer;
NMHTTP1.Port:=iPort;
NMHTTP1.Connect;
NMHTTP1.Write('POST /ErrorTest/Default.aspx HTTP/1.1'+#13#10);
NMHTTP1.Write('Content-Type: application/x-www-form-urlencoded'+#13#10);
NMHTTP1.Write('Content-Length: '+inttostr(length(s))+#13#10);
NMHTTP1.Write('Connection: close'+#13#10+#13#10);
s := 'station_id=1&text='+UTF8Encode('вася пупкин');
NMHTTP1.Write(s);
NMHTTP1.Disconnect;
Фактически это ручная запись всего HTTP-запроса в выходной поток. И в ней символы = и & не закодированы никаким url-кодированием. Так - заработало. Сервер различил параметры и корректно сформировал коллекцию Request.Params.