Главная страница
    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.007 c
15-1242105022
otan
2009-05-12 09:10
2009.07.12
Доступ к данным парадокса формата *.MB


15-1241883974
@!!ex
2009-05-09 19:46
2009.07.12
Как отследить изменение памяти?


15-1242300710
Jeer
2009-05-14 15:31
2009.07.12
Помощь


2-1242877845
NaRuTo
2009-05-21 07:50
2009.07.12
Как узнать продолжительность звукового файла?


15-1241777689
Empleado
2009-05-08 14:14
2009.07.12
Любителям web-art посвящается





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский