![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос про поток при POST запросе. [D7, XP]
vegarulez © (2008-08-15 13:18:00)Привет всем мастерам!
Суть вопроса - требуется отправить методом Post данные используя поток. Сделал, но использовал TIdMultiPartFormDataStream но там получается он вставлет ещё всякую информацию , т.к. получается не просто запрос, а мультипарт.
AValues.Values['Version'] := '2.01';
AValues.Values['TR_NR'] := '126';
AValues.Values['DSTACNT_NR'] := '410037637381';
AValues.Values['TR_AMT'] := '6.05';
AValues.Values['CUR_CD'] := '10643';
AValues.Values['ACT_CD'] := '1';
AValues.Values['CONT'] := 'Иванов Иван Иванович';
MyList.LoadFromFile('./test.txt.asc');
AValues.Values['SIGN']:=MyList.Text;
PostStream:= TIdMultiPartFormDataStream.Create;
Response := TIdStringStream.Create('');
try
PostStream.AddFormField('Version', AValues.Values['Version']);
PostStream.AddFormField('TR_NR', AValues.Values['TR_NR']);
PostStream.AddFormField('DSTACNT_NR', AValues.Values['DSTACNT_NR']);
PostStream.AddFormField('TR_AMT', AValues.Values['TR_AMT']);
PostStream.AddFormField('CUR_CD', AValues.Values['CUR_CD']);
PostStream.AddFormField('ACT_CD', AValues.Values['ACT_CD']);
PostStream.AddFormField('CONT', AValues.Values['CONT']);
PostStream. AddFormField('SIGN', AValues.Values['SIGN']);
// вот тут я смотрю что в запросе параметры разделены, т.к. мультипарт
memo1.Lines.LoadFromStream(PostStream);
// сама отправка
HTTP.Post(cbURL.Text, PostStream, Response);
finally
MemoHTML.Text := Response.DataString;
Response.Free;
PostStream.Free;
AValues.Free;
end;
Вопрос как сделать обычный просто запрос? делал вот так:
MyList.Text:=
'Version=2.01'+
'&TR_NR=126'+
'&DSTACNT_NR=410037637381'+
'&TR_AMT=6.05'+
'&CUR_CD=10643'+
'&ACT_CD=1'+
'&CONT=Иванов Иван Иванович'+
'&SIGN='+TIdURI.ParamsEncode(
'-----BEGIN PGP MESSAGE-----'#10#13+
'Version: PGP 6.5.8'#10#13+
#10#13+
'owEBWwGk/okBFQMFAEg5G9NTVL2hVupyiQEBSiYIAJg38k/9M0U5NJBVZ0HdANxD'#10#13+
'EZva1ewzBzcO/oWXwcQkIdcSYgBdlhddxr7H435Zr1/0gCysqxQdeBszNb7K+fiz'#10#13+
'1SNdQyONWlRuvuzHORTuZPMT4YLfqNH675mjMBbGbO2x7xDgfZE+cMFpVPSnALeQ'#10#13+
'PzuUuUsc6+CPIgCUdmlgZgbgfjepxCH4n9dhznOmfx2YSg1fl1I9O/PNxWk7spLu'#10#13+
'06YCH0FUCwvICV2oHP5qnyZA3Pukj07L4e0cXj/IQYIgHMIgvYYxUaCPD/cY7qN0'#10#13+
'luAKNCQfAyNiHZXncerhS+vzaunsKN74HXLKz/FxtcR0l8+y7sFQaZPqXMU40Q+s'#10#13+
'QWIJdGVzdDYudHh0AAAAADEyNiYxJjQxMDAzNzYzNzM4MSY2LjA1JjEwNjQzJsji'#10#13+
'4O3u4iDI4uDtIMji4O3u4uj3'#10#13+
'=/Q+S'#10#13+
'-----END PGP MESSAGE-----');
//MyPGPSign.LoadFromFile('./test.txt.asc');
MyList.SaveToStream(TempStream);
HTTP.Post(cbURL.Text, TempStream, Response);
MemoHTML.Text := Response.DataString;
Но так не работает...
Нужно загрузить содержимое подписи из файла (как реализовано в этой строке
//MyPGPSign.LoadFromFile('./test.txt.asc');
), при том что остальные параметры уже буду добавлены в поток запроса.
Раньше просто сразу скопмпанованный запрос Post отправлял без потока, используя Tstrings, но запрос не проходил на сервере, т.к. подпись pgp косячилась и вот что мне сказали программисты(дескать почему она косячется):
"Это особенность объекта TidHTTP: если ему в методе POST передать список
строк (TStrings), то он все переносы строк заменить на знаки &, в итоге
подпись (которая содержит эти переносы) становится невалидной. Необходимо
перед передачей содержимое списка (через свойство Text) передать в поток
(TMemoryStream) и его передать в метод POST в качестве параметра, тогда
компонент не будет переформатировать запрос."
Подскажите как сделать.
(2008-08-17 18:12:00) [1]Удалено модератором
(2008-08-17 18:12:00) [2]Удалено модератором
(2008-08-17 18:12:00) [3]Удалено модератором
(2008-08-17 14:48:00) [4]Удалено модератором