Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2009.07.12;
Скачать: [xml.tar.bz2];

Вниз

Можно ли заставить работать NMHTTP1.Post ?   Найти похожие ветки 

 
kaif ©   (2008-03-05 21:03) [0]

При отсылке параметров методом Post до сервера они не доходят.
NMHTTP1.Post(url, "param1=value1&param2=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.013 c
15-1241861566
xayam
2009-05-09 13:32
2009.07.12
ExtJS и форматированный вывод


15-1242160207
Юрий
2009-05-13 00:30
2009.07.12
С днем рождения ! 13 мая 2009 среда


2-1242724147
siealex
2009-05-19 13:09
2009.07.12
Отследить цифру в окне стороннего приложения и нажать в нем же


15-1241762640
мс_анатолий
2009-05-08 10:04
2009.07.12
случайный ряд


15-1241731931
Игорь Шевченко
2009-05-08 01:32
2009.07.12
А кто чем почту читает ? :)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский