Форум: "Сети";
Текущий архив: 2009.07.12;
Скачать: [xml.tar.bz2];
ВнизМожно ли заставить работать NMHTTP1.Post ? Найти похожие ветки
← →
kaif © (2008-03-05 21:03) [0]При отсылке параметров методом Post до сервера они не доходят.
NMHTTP1.Post(url, "param1=value1¶m2=value2");
С проблемой многие сталкивались, судя по тому, что я вижу в google и yandex-е. Но решения ни у кого не нашел. Отсылку параметров файлом не предлагать. Она работает, но я хочу разобраться с отсылкой, которая приведена в каноническом демонстрационном примере для метода Post.
Url-кодирование параметров тоже не помогает, впрочем, даже один простейший параметр вида "station_id=1" не отправляется.
Исходного кода TNMHTTP у меня нет, что он там делает, я не знаю. В чем затык? Кто-нибудь знает?
← →
kaif © (2008-03-06 12:35) [1]Похоже, что метод 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.
← →
Сергей М. © (2008-03-06 12:49) [2]
> Исходного кода TNMHTTP у меня нет
Его ни у кого нет, не только у тебя.
> Похоже, что метод Post этого компонента содержит существенный
> баг
И если бы он был единственным !
Засады в FastNet-компонентах могут поджидать в самых неожиданных местах, и было бы лучше не ждать их и не надеяться на авось, а взять на вооружение любой другой компонент, пусть и плохенький с т.з. функциональности, но с исх.текстами.
← →
kaif © (2008-03-06 17:14) [3]2 Сергей М. © (06.03.08 12:49) [2]
Да в общем-то я все, что нужно было реализовал.
Еще я ftp-компонент с этой палитры забраковал.
Но HTTP вроде работает (кроме метода Post).
:)
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2009.07.12;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.003 c