Форум: "Начинающим";
Текущий архив: 2008.09.28;
Скачать: [xml.tar.bz2];
ВнизВопрос про поток при POST запросе. Найти похожие ветки
← →
vegarulez © (2008-08-15 13:18) [0]Привет всем мастерам!
Суть вопроса - требуется отправить методом 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 14:48) [1]Удалено модератором
← →
имя (2008-08-17 18:12) [2]Удалено модератором
← →
имя (2008-08-17 18:12) [3]Удалено модератором
← →
имя (2008-08-17 18:12) [4]Удалено модератором
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.09.28;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.045 c