Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.02.2016, 14:03
i1j1k1 i1j1k1 вне форума
Прохожий
 
Регистрация: 01.02.2016
Сообщения: 3
Версия Delphi: Delphi XE 7
Репутация: 10
По умолчанию Промежуточное CGI, проблема с передачей POST

Здравствуйте.
Хочу написать своё CGI приложение и вставить его между страницей сайта и родным CGI, т.к. его исходников нет, а надо изменить вывод.
В общем, пытаюсь переадресовать "как есть" параметры, передаваемые методом POST, но процесс зависает. Подскажите, пожалуйста, в чём может быть проблема, или как можно проще передать POST от страницы ко второму CGI?
Код:
IdHTTp1:=TIdHTTP.Create(nil);
IdHTTp1.Request.UserAgent:='Opera/9.80 (Windows NT 6.1) Presto/2.12.388 Version/12.12';
IdHTTp1.Request.Host:=sname;
readln(s); //пытаюсь получить POST параметры
writeln(IdHTTp1.Post(sname+'/MarcWeb/Exe/OPACServletBody.exe',s));

Через какое-то время вылезает ошибка 502.2
Цитата:
Ошибка HTTP 502.2 - Bad Gateway
Указанное приложение CGI не работает должным образом: оно не возвращает полный набор заголовков HTTP. Возвращенные заголовки: "".
Ответить с цитированием
  #2  
Старый 02.02.2016, 12:20
i1j1k1 i1j1k1 вне форума
Прохожий
 
Регистрация: 01.02.2016
Сообщения: 3
Версия Delphi: Delphi XE 7
Репутация: 10
По умолчанию Дополнение

Осознал, что для моей цели нужно использовать WebModule. Параметры теперь получаю, но проблема с их отправкой.
Код:
  data := TIdMultiPartFormDataStream.Create;
  for i := 0 to Request.ContentFields.Count-1 do
    begin
      p:=pos('=',Request.ContentFields[i]);
      sl:=Copy(Request.ContentFields[i],1,p-1);//левая часть, название параметра
      sr:=Copy(Request.ContentFields[i],p+1,length(Request.ContentFields[i])-p); //правая часть, значение параметра
      data.AddFormField(sl,sr);
    end;
  IdHTTp1:=TIdHTTP.Create(nil);
  IdHTTp1.Request.UserAgent:='Opera/9.80 (Windows NT 6.1) Presto/2.12.388 Version/12.12';
  IdHTTp1.Request.Host:=sname;
  Response.Content:=Response.Content+IdHTTp1.Post('http://'+sname+'/MarcWeb/Exe/OPACServletBody.exe',data);

В общем, приходит ответ от исходного EXE файла, "Ошибка параметров HTML-формы!" (генерируется им).
Как сделать так, чтобы переслать без каких-то искажений все входящие POST параметры? Или в чем сейчас может быть разница между тем, как параметры пришли в мой CGI и как были переданы. Исходя из того, что при получении параметров через моего посредника, исходное CGI сообщает об ошибке, какая-то разница существует.
Ответить с цитированием
  #3  
Старый 02.02.2016, 13:57
i1j1k1 i1j1k1 вне форума
Прохожий
 
Регистрация: 01.02.2016
Сообщения: 3
Версия Delphi: Delphi XE 7
Репутация: 10
По умолчанию Заключение

В общем, разобрался. Попутно всплыла проблема с тем, что ответ приходил в Windows-1251, а должен был отображаться как utf-8. В результате жестокого и беспощадного перебора был рожден этот, так сказать, код, работающий в моём случае. Возможно, кому-то пригодится.
Код:
function StrAnsiToUtf(aStr: string): string;
var
 Encoding, aEncoding: TEncoding;
 Buffer: TBytes;
begin
 Encoding := TEncoding.UTF8;
 aEncoding := TEncoding.Default;
 Buffer := Encoding.GetBytes(aStr);
 TEncoding.Convert(aEncoding, Encoding, Buffer);
 Result := aEncoding.GetString(Buffer);
end;

procedure TWebModule1.WebModule1DefaultHandlerAction(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
  IdHTTp1:=TIdHTTP.Create(nil);
  IdHTTp1.Request.UserAgent:='Opera/9.80 (Windows NT 6.1) Presto/2.12.388 Version/12.12';
  IdHTTp1.Request.Host:=sname;
  IdHTTp1.Request.ContentType := 'text/plain; charset=windows-1251';  st:=StrAnsiToUtf(IdHTTp1.Post('http://'+sname+'/MarcWeb/Exe/OPACServletBody.exe',Request.ContentFields));
  Response.Content:=Response.Content+ st;
end;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:40.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter