Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2010, 13:59   #1
IvanBegin
Пользователь
 
Регистрация: 04.02.2010
Сообщений: 10
По умолчанию idHTTP. Пропадают байты запроса !!!

Добрый день, товарищи программеры. У меня следующая проблема:

На Delphi 7 с проапгрейженной Indy до 10.2.3 пытаюсь отправить
запрос серверу по idHTTP (хочу сэмулировать запрос из флеш-приложения).
С заголовком разобрался, авторизация проходит. Однако дебаггер
(softxhttp) кажет мне что тело запроса не такое, как я вставляю в
соответствующую переменную: почему то съедаются первые 3 байта тела
запроса (их hex - 09 01 09) до букв.

Код такой: (кстати, я новичёк в Дельфях, так что плиз не сильно критикуйте

procedure TForm1.Button1Click(Sender: TObject);
var
Data:TStringList;
Response: TStringStream;
F:file of byte; bb:byte; req,tmp:string; pos:word;
Begin
req:='';
assignfile(f,'req_obraz.txt'); reset(f); // читаю из файла эталонный запрос,
for pos:=1 to filesize(f) do begin // сохраненный дебаггером
read(f,bb);
req:=req+char(bb);
end;
Data:=TStringList.Create;
Data.Clear;
Response := TStringStream.Create('');
idHTTP1:=TIdHTTP.Create(nil);
idHttp1.Request.Accept:='*/*';
idHttp1.Request.AcceptLanguage:='ru-RU';
idHttp1.Request.Connection:='Keep-Alive';
idHttp1.Request.CacheControl:='no-cache';
idHttp1.Request.ContentType:='appli cation/x-www-form-urlencoded';
// .......
// и так далее - задаю параметры заголовка - в дебаггрере они отображаются почти как нужно
idHTTP1.AllowCookies:=true;
Data.add(req);
Data.SaveToFile('req_Data_saved.txt '); // убеждаюсь что запрос вписался как надо, только стал на 2 байта больше
IdHTTP1.post('http://[путь такой же как у эталона в дебаггере]',Data,response);
DBMemo1.Text:=utf8toansi(response.d atastring);
end;

Итак, сравнивая в дебаге текст того что я отправляю с эталоном запроса, вижу что
он обреза на 3 байта спереди и на один в конце. Ессно сервер ругается ошибкой...
Крутил-вертел параметры в заголовке - но никак не могу добиться точной отправки нужной
мне последовательности байт. Складывается впечатление что idHTTP както отфильтровывает
определенные байты. Есть ли альтернативный формат ввода данных, а не через стринг ?
В чем может быть косяк? Помогите плиз - второй день парюсь....((

П.С. есть конечно подозрения в несоответствии версий http, ибо флешка отсылает в 1.1,
а прога, как я её не крутил (даже инди для этого обновлял) - в 1.0, но не уверен...

Последний раз редактировалось IvanBegin; 04.02.2010 в 20:59.
IvanBegin вне форума Ответить с цитированием
Старый 05.02.2010, 14:07   #2
IvanBegin
Пользователь
 
Регистрация: 04.02.2010
Сообщений: 10
По умолчанию

Спасибо всем за помощь и полезные советы.

Разобрался сам - все сделал через WinInet, чего всем и желаю!
IvanBegin вне форума Ответить с цитированием
Старый 05.02.2010, 14:21   #3
Usov
Форумчанин
 
Аватар для Usov
 
Регистрация: 29.09.2009
Сообщений: 228
По умолчанию

А что ты ждал? Как задал вопрос так и получил ответ Твой код в реале невозможно проверить, а люди тут, как сам понимаешь, без дела не сидят чтоб догадываться на каком сайте протестировать твой пример.
Usov вне форума Ответить с цитированием
Старый 08.02.2010, 09:38   #4
IvanBegin
Пользователь
 
Регистрация: 04.02.2010
Сообщений: 10
По умолчанию

Вобщето была надежда на людей, столкнувшихся с подобной проблемой. Ну или способных порекомендовать что-нть альтернативное, как вариант - wininet. Но я рад что до всего допер сам.
А что до того как задан вопрос - там все разжевано до предела. и дело не в скрипте на сервере - он то все принимает правильно, а как раз в idHTTP, который именно ест байты, а не то, на что нагло переименовали мою тему.
Как проверить ?! да лехко - кидаем одну кнопку и мему на форму, копируем процедуру. берем любой сервер с php и перехватываем запрос на него, сохряняем тело запроса в файл req_obraz.txt, запускаем прогу и сравиниваем в том же дебаггере что летит из проги с тем что должно быть. Если для вас это сложно, то извините))
Ну а уж раз ваши гуру так сильно заняты своими проектами - зачем они вообще тут сидят? Надеюсь вы себя к оным не причисляете ?

Последний раз редактировалось IvanBegin; 08.02.2010 в 09:43.
IvanBegin вне форума Ответить с цитированием
Старый 08.02.2010, 15:53   #5
Usov
Форумчанин
 
Аватар для Usov
 
Регистрация: 29.09.2009
Сообщений: 228
По умолчанию

У меня сборка инди тоже 10.2.3 и никаких проблем ни с какими запросами небыло если правильно формировать запрос. Поэтому и говорил об нормальном примере чтоб можно было проверить у себя. Я очень часто наталкивался что разные сборки инди совсем по разному работают.

Последний раз редактировалось Usov; 08.02.2010 в 16:08.
Usov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пропадают компоненты! postal2 Компоненты Delphi 4 26.11.2009 15:42
[Idhttp] Приостановка get-запроса EaRLL Работа с сетью в Delphi 3 27.09.2009 18:43
Отправка запроса на AMFPHP гейт через idHTTP ZaRDaK Работа с сетью в Delphi 8 04.09.2009 20:03
Как в ProgressBar отобразить процесс выполнения Post запроса через Idhttp Joe_Tribbiani Работа с сетью в Delphi 8 15.06.2009 10:39
Пропадают кнопки из ListBox Alter Компоненты Delphi 4 16.02.2008 17:27