Текущий архив: 2009.12.13;
Скачать: CL | DM;
ВнизКак создать правильный POST-запрос для E-port? Найти похожие ветки
← →
Dmitriy (2009-10-22 15:13) [0]Здравствуйте!
Пишу ПО для связи с сервером E-port. А конкретнее, нужно правильно создать POST-запрос. Дело в том, что пустые запросы для получения справочника, лимита, и информационных сообщений, согласно описанию на сайте http://www.e-port.ru/dev/ по версии протакола 2, все работает, а вот уже запрос на проведение операции не работает. При отправке на https://dealer.e-port.ru/cp/fe выдает "HTTP/1.1 400 Bad Request".
Код вот какой:
data := TStringList.Create;
data.Clear;
data.Add("OPERATION");
data.Add("id=123456789");
data.Add("checkid=123456");
data.Add("product=4420");
data.Add("value=10.0000RUR");
data.Add("account=9130000000");
IdHTTP1.Request.ContentType := "text/plain; charset=Windows-1251";
IdHTTP1.Request.ContentLength := length(data.Text);
IdHTTP1.Request.CustomHeaders.Add("X-Eport-Auth: point=500000; card="231000-00000"; pin="*********"");
MainForm.MemInfo.Lines.Text := IdHTTP1.Post("https://dealer.e-port.ru/cp/fe", data);
Data.Free;
Может хоть кто-нибудь показать где у меня ошибка? Может кто-то сталкивался с такой проблемой?
← →
Медвежонок Пятачок © (2009-10-22 15:39) [1]во первых убери ручное упоминание о длине контента.
во вторых ответ на вопрос скорее всего лежит в прикладной области епорта и к пост-запросам не имеет никакого отношения.
← →
Медвежонок Пятачок © (2009-10-22 15:41) [2]еще можно погрешить на неуказанную версию инди. в одной из версий пост неправильно работал с данными из стринглиста
← →
Dmitriy (2009-10-22 15:54) [3]
> во первых убери ручное упоминание о длине контента
Что это значит?
> еще можно погрешить на неуказанную версию инди. в одной
> из версий пост неправильно работал с данными из стринглиста
Версия Indy 9. Которая вместе с Delphi 7.
← →
Hint (2009-10-22 15:57) [4]Это значит убрать
IdHTTP1.Request.ContentLength := length(data.Text);
← →
Медвежонок Пятачок © (2009-10-22 16:02) [5]Версия Indy 9. Которая вместе с Delphi 7.
Этих "девятых" версий как грязи.
У тебя какая девятая?
← →
sniknik © (2009-10-22 19:08) [6]> При отправке на https://dealer.e-port.ru/cp/fe выдает "HTTP/1.1 400 Bad Request".
не помню, что но чтото у меня с ним было, почему на 10ку перешел...
чего не вспомню, вот
http://delphimaster.net/view/4-1189799328/
> sniknik © (17.09.07 11:20) [8]
уже тогда забыл...
← →
sniknik © (2009-10-22 19:33) [7]проверил на 10ке, то же самое - HTTP/1.1 400 Bad Request
похоже реально "плохой запрос"
а что за данные (строку запроса) нужно послать? т.к. то что ты там в стринглист набираешь перед посылкой преобразуется к виду -
"OPERATION&id=123456789&checkid=123456&product=4420&value=10.0000RUR&account=913 0000000"
по протоколу того сайта, так и надо? доку посмотри.
← →
Dmitriy (2009-10-23 07:38) [8]
> Это значит убратьIdHTTP1.Request.ContentLength := length(data.
> Text);
А что вместо этого предлагается подставить? Ведь в запросе для E-port, согласно документации самого E-port"а, это "обязательный заголовок содержит длину тела HTTP-сообщения".
Я попробовал указать его таким образом:
IdHTTP1.Request.CustomHeaders.Add("Content-length: "+IntToStr(length(data.Text)));
и соответственно не задавать IdHTTP1.Request.ContentLength и у меня выдало у же другое сообщение: 413 "Request Entity Too Large".
И как быть?
> а что за данные (строку запроса) нужно послать? т.к. то
> что ты там в стринглист набираешь перед посылкой преобразуется
> к виду - "OPERATION&id=123456789&checkid=123456&product=4420&value=10.
> 0000RUR&account=913 0000000"
Не знаю как у вас, но например у меня в data.text, длину которой я читаю, нет никаких символов &, а переносы как и положено обозначены #$D#$A или #13#10, как угодно. На сайте E-port, между прочим, так и должно быть. По крайней мере, такие примеры запросов там приводятся.
← →
sniknik © (2009-10-23 07:58) [9]> Не знаю как у вас, но например у меня в data.text
а при чем тут data.text? преобразование идет внутри компонента, перед посылкой, и самих посылаемых данных, а не их источника. вряд ли в 9-ку было по другому (есть причина зачем это делается).
если тебе говорят, что фотография испорчена ты же не понимаешь это так, что у тебя лицо засвечено...
> E-port, между прочим, так и должно быть.
должно быть с переносами или должно быть с &? ошибку то тебе о неверности запроса они возвращают... (не имхо), т.е. это не ошибка компонент/протокола http, и т.д. это неверно составлен пакет запроса.
> По крайней мере, такие примеры запросов там приводятся.
с примерами на дельфи? и с посылкой, с данными в stringлисте? ну тогда о чем разговор? обратись туда в поддержку скажи, что пример не рабочий... пусть исправят.
← →
sniknik © (2009-10-23 08:06) [10]p.s. а вообще что за манеры, блин, просил же пример посылаемых данных, объяснил почему, и в вместо того чтобы привести этот пример, начинаются "отмазки" типа "у меня все правильно"... как всегда в общем то, позиция ламера - "виновато все что угодно, но не мой код, мои не знания используемых компонент".
или не нужно самому документацию по твоей проблеме читать чтобы найти этот пример? нафиг, нафиг.
← →
Медвежонок Пятачок © (2009-10-23 09:14) [11]А что вместо этого предлагается подставить? Ведь в запросе для E-port, согласно документации самого E-port"а, это "обязательный заголовок содержит длину тела HTTP-сообщения".
Ничего не ставить.
← →
Медвежонок Пятачок © (2009-10-23 09:24) [12]Не знаю как у вас, но например у меня в data.text, длину которой я читаю, нет никаких символов &, а переносы как и положено обозначены #$D#$A или #13#10, как угодно.
На сайт епорта попадает не твой дата текст, а то, что сделал с ним класс tidhttp.
Ты или к советам прислушивайся, или мучай свою голову в одиночку.
← →
Anatoly Podgoretsky © (2009-10-23 11:55) [13]> Dmitriy (23.10.2009 07:38:08) [8]
А для HTTP переносы строк ничего не значат, они игнорируются.
← →
Dmitriy (2009-10-23 13:43) [14]Решил проблему сам, всем спасибо, можно закрывать тему.
Страницы: 1 вся ветка
Текущий архив: 2009.12.13;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.009 c