Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi и сети
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 5.00
georgy544
0 / -1 / 1
Регистрация: 19.02.2015
Сообщений: 60
#1

Web-сервер на Delphi - Delphi

19.03.2015, 16:22. Просмотров 3535. Ответов 15
Метки нет (Все метки)

Доброго времени суток, решил научиться создавать веб страницы при помощи delphi, но напоролся на гвозди... не могу понять как присваивать переменные какие-нибудь из кода Delphi в код html, как ниже видно все это делается только через делфи, допустим у меня есть поле edit1, то как мне записать его в части кода как переменную html, очень сложно найти информацию по веб разработке через delphi... подскажите пожалуйста, как это реализовать

Delphi
1
2
3
4
5
6
7
procedure TForm2.IdHTTPServer1CommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
 
begin
 
 AresponseInfo.ContentText:='<HTML> <Body>  <H1> '+ get(edit1.Text)+' <H1> <end>' ;
end;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.03.2015, 16:22
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Web-сервер на Delphi (Delphi):

Web-сервер не работает с локалхостом
Доброе время суток. Я пишу web-сервер, вот его код: procedure...

Delphi и Web
Всем привет! На сайте моего провайдера есть возможность посмотреть свою...

Delphi Web Server
Всем привет, ребят подскажите пожуйсто как сделать веб сервер на делфи чтобы он...

Web server Delphi
Требуется создать простенький web server на delphi. Функции которого будут...

Delphi и web-доступ к базе из linux
Есть в наличии delphi xe7, windows server 2008 r2, ms sql 2008 r2. Так же...

Заполнение Web формы (поле select) Delphi
Всем здравствуйте. Решил написать программку, которая открывает WEB страничку...

15
krapotkin
3298 / 2938 / 1015
Регистрация: 14.04.2014
Сообщений: 14,266
Записей в блоге: 13
19.03.2015, 17:02 #2
Delphi
1
'<HTML> <body>  <H1> '+ TextString+' </H1> </body>'
про edit1.text сомневаюсь. вызов идет вроде не в главном потоке, так что к VCL обращаться нельзя

гвозди там в других местах совсем. кодировки например
0
georgy544
0 / -1 / 1
Регистрация: 19.02.2015
Сообщений: 60
20.03.2015, 06:45  [ТС] #3
Цитата Сообщение от krapotkin Посмотреть сообщение
Delphi
1
'<HTML> <body>  <H1> '+ TextString+' </H1> </body>'
про edit1.text сомневаюсь. вызов идет вроде не в главном потоке, так что к VCL обращаться нельзя

гвозди там в других местах совсем. кодировки например
А как тогда это реализовать, можете объяснить пожалуйста, а то опыта в этом направление толком не имею... и не очень понятно..
0
krapotkin
3298 / 2938 / 1015
Регистрация: 14.04.2014
Сообщений: 14,266
Записей в блоге: 13
20.03.2015, 08:51 #4
так все правильно же.
Берешь и формируешь ответ в зависимости от запроса, который пришел
это может быть HTML, картинка, просто текст, файл и т.д.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
procedure TForm2.IdHTTPServer1CommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
 
begin
  if (ARequestInfo.Document = '/') then
  begin
      AResponseInfo.ContentType := 'text/html';
      AResponseInfo.CharSet := 'utf-8';
      s := '<HEAD>' +
      '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">' +
      '<title>my web-server</title>' +
      '</HEAD>' +
      '<body>' + 
      '<div id="main">'+
      '<p>Поздравляю!<br>' +
      'Если вы читаете этот текст, веб-сервер работает.</p>' +
      '</div>' + 
      '</body>';
      AResponseInfo.ContentText := s;
   end
   else if (ARequestInfo.Document = '/favicon.ico') then
   begin
      filepath:=extractfilepath(paramstr(0))+'img\';
      filename:='favicon.ico';
      AResponseInfo.ContentType := IdHTTPServer1.MIMETable.GetFileMIMEType(filename);
      AResponseInfo.ContentDisposition := 'attachment; filename=' + filename;
      AResponseInfo.CacheControl := 'no-cache';
      if not System.sysutils.fileexists(filepath + filename) then exit;
      fs := TFileStream.Create(filepath + filename,fmOpenRead + fmShareDenyWrite);
      AResponseInfo.ContentLength := fs.Size;
      AResponseInfo.ContentStream := fs;
   end;
Добавлено через 7 минут
про вставить edit.text не думал как-то
пробуй. если пойдет, то пойдет...

это решение для простого сервера
посложнее - File - New - Other - WebBroker - Web Server Application

в youtube есть прекрасные видео. Гугли Delphi web server
https://www.youtube.com/watch?v=S7pG2PKcse0
https://www.youtube.com/watch?v=p85OwANw4I4
0
georgy544
0 / -1 / 1
Регистрация: 19.02.2015
Сообщений: 60
22.03.2015, 15:07  [ТС] #5
Цитата Сообщение от krapotkin Посмотреть сообщение
так все правильно же.
Берешь и формируешь ответ в зависимости от запроса, который пришел
это может быть HTML, картинка, просто текст, файл и т.д.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
procedure TForm2.IdHTTPServer1CommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
 
begin
  if (ARequestInfo.Document = '/') then
  begin
      AResponseInfo.ContentType := 'text/html';
      AResponseInfo.CharSet := 'utf-8';
      s := '<HEAD>' +
      '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">' +
      '<title>my web-server</title>' +
      '</HEAD>' +
      '<body>' + 
      '<div id="main">'+
      '<p>Поздравляю!<br>' +
      'Если вы читаете этот текст, веб-сервер работает.</p>' +
      '</div>' + 
      '</body>';
      AResponseInfo.ContentText := s;
   end
   else if (ARequestInfo.Document = '/favicon.ico') then
   begin
      filepath:=extractfilepath(paramstr(0))+'img\';
      filename:='favicon.ico';
      AResponseInfo.ContentType := IdHTTPServer1.MIMETable.GetFileMIMEType(filename);
      AResponseInfo.ContentDisposition := 'attachment; filename=' + filename;
      AResponseInfo.CacheControl := 'no-cache';
      if not System.sysutils.fileexists(filepath + filename) then exit;
      fs := TFileStream.Create(filepath + filename,fmOpenRead + fmShareDenyWrite);
      AResponseInfo.ContentLength := fs.Size;
      AResponseInfo.ContentStream := fs;
   end;
Добавлено через 7 минут
про вставить edit.text не думал как-то
пробуй. если пойдет, то пойдет...

это решение для простого сервера
посложнее - File - New - Other - WebBroker - Web Server Application

в youtube есть прекрасные видео. Гугли Delphi web server
https://www.youtube.com/watch?v=S7pG2PKcse0
https://www.youtube.com/watch?v=p85OwANw4I4
спасибо) да смотрел уже видюшки) там поляки или кто это говорит) половина на английском половина на своем) так что методом тыка догонял, если что еще спрошу моменты не понятные с едитом разобрался, в принципе все правильно было написано, но я так и не понел почему ошибку выводило, получается между кодом html просто ну жно вставлять код делфи и все должно работать, в понедельник разбирусь получше, на работе все лежит
0
krapotkin
3298 / 2938 / 1015
Регистрация: 14.04.2014
Сообщений: 14,266
Записей в блоге: 13
22.03.2015, 15:19 #6
Цитата Сообщение от georgy544 Посмотреть сообщение
между кодом html просто ну жно вставлять код делфи
нет
нужно формировать строку - ответ
хочешь, целиком из файла
хочешь, по кусочкам ее собирай
просто собери и отдай

кода HTML тут не существует, это просто строка
0
georgy544
0 / -1 / 1
Регистрация: 19.02.2015
Сообщений: 60
23.03.2015, 13:28  [ТС] #7
так более менее разобрался, теперь возникла проблема при запросе на андроеде, выдает (no mapping for the unicode character exists in the target multi-byte code page), не могу понять какая кодировка ему нужна... только при русском тексте появляется.. буду благодарен если подскажите какая кодировка нужна
0
krapotkin
3298 / 2938 / 1015
Регистрация: 14.04.2014
Сообщений: 14,266
Записей в блоге: 13
23.03.2015, 13:53 #8
версия делфи?
код показывай
0
georgy544
0 / -1 / 1
Регистрация: 19.02.2015
Сообщений: 60
24.03.2015, 11:31  [ТС] #9
XE7
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm2.Button1Click(Sender: TObject);
var s,cs:string;
ss : TstringStream;
begin
ss:=TstringStream.Create;
cs:='http://192.168.0.242:8080/?test='+inttostr(ComboBox1.ItemIndex) ;
try
Idhttp1.get(cs,ss) ;
s:=(ss.DataString);
finally
ss.Free;
end;
memo1.Lines.Add(s);
Добавлено через 2 минуты
с серверной части все хорошо выдает, на русском, а вот на клиенте, именно на андроиде пишет ошибку с русским текстом
0
krapotkin
3298 / 2938 / 1015
Регистрация: 14.04.2014
Сообщений: 14,266
Записей в блоге: 13
24.03.2015, 12:16 #10
а как узнать содержимое S ?
и чем не устраивает

s:=IdHTTP1.Get(URL);
?
0
georgy544
0 / -1 / 1
Регистрация: 19.02.2015
Сообщений: 60
25.03.2015, 06:36  [ТС] #11
ошибка почему-то вылазила, после того как я присвоил адрес к переменной, то ошибка перестала вылазить, так и не понял с чем связано было... дак не в этом дело) мне интересно какая кодировка должна быть на телефоне что бы прочитывать текст из Web страницы....

Добавлено через 7 минут
http://www.cyberforum.ru/android-dev/thread1357379.html вот у меня похожая проблема
0
krapotkin
3298 / 2938 / 1015
Регистрация: 14.04.2014
Сообщений: 14,266
Записей в блоге: 13
25.03.2015, 06:58 #12
если в HTML правильно заполнен заголовок charset utf-8
и данные отправляются в utf-8
все будет прекрасно читаться
0
georgy544
0 / -1 / 1
Регистрация: 19.02.2015
Сообщений: 60
25.03.2015, 09:11  [ТС] #13
мне кажется всё дело в том что я использую вот этот тип charset=windows-1251'; наверно у мобильного устройства и возникает проблема его просмотреть... а в какой тогда тип надо переводить?

Добавлено через 1 минуту
мне кажется всё дело в том что я использую вот этот тип charset=windows-1251'; наверно у мобильного устройства и возникает проблема его просмотреть... а в какой тогда тип надо переводить?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
procedure TForm2.Button1Click(Sender: TObject);
begin
IdHTTPServer1.Active :=true;
memo1.Lines.Add(datetimetostr(now)+' Сервер запущен')
end;
 
procedure TForm2.Button2Click(Sender: TObject);
begin
IdHTTPServer1.Active :=false;
memo1.Lines.Add(datetimetostr(now)+' Сервер остановлен')
end;
 
procedure TForm2.Button3Click(Sender: TObject);
begin
close;
end;
 
procedure TForm2.IdHTTPServer1CommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
  var a:integer;
begin
AResponseInfo.ContentType := 'text/html; charset=windows-1251';
if ARequestInfo.Params.Text='' then AResponseInfo.ContentText:=('<HTML> <Body> <title> StartPage</title> Hello </Body></HTML>') else
begin
memo1.Lines.Add(ARequestInfo.Params.Text);
a:=strtoint(ARequestInfo.Params.Values['test']);
case a of
0: AResponseInfo.ContentText:=('<HTML> <Body> <title> ЦТП-1 </title>ЦТП-1 </Body></HTML>');
1: AResponseInfo.ContentText:=('<HTML> <Body> <title> ЦТП-2 </title>ЦТП-2 </Body></HTML>');
2: AResponseInfo.ContentText:=DataSetTableProducer1.Content;
 //AresponseInfo.ContentText:='<HTML> <Body> <title> TestSQLBD </title> '+ stringgrid1.Cells[0,1]+' * '+ stringgrid1.Cells[1,1] +'*'+stringgrid1.Cells[2,1]+'</Body></HTML>' ;
end;
end;
end;
0
krapotkin
3298 / 2938 / 1015
Регистрация: 14.04.2014
Сообщений: 14,266
Записей в блоге: 13
25.03.2015, 09:13 #14
прочти еще раз...
http://www.cyberforum.ru/delphi-netw...ml#post7385638
0
georgy544
0 / -1 / 1
Регистрация: 19.02.2015
Сообщений: 60
25.03.2015, 09:14  [ТС] #15
все работает, спасибо) с ошибкой написал)) тему пока не закрываю)
0
krapotkin
3298 / 2938 / 1015
Регистрация: 14.04.2014
Сообщений: 14,266
Записей в блоге: 13
25.03.2015, 09:55 #16
да, я тоже очень радовался, когда запустился мой сервер ))
0
25.03.2015, 09:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.03.2015, 09:55
Привет! Вот еще темы с решениями:

Получить DataSet от web-cервиса (VS.NET) в Delphi 7
Есть веб-сервис, один из методов которого возвращает DataSet, содержащий...

Delphi + сервер
Сразу извиняюсь за то что я нуб))) Мне нужно чтобы с приложения отправлялся...

Http сервер Delphi
Короче дамы и господа, проблема такого характера: Я сгенирировал html код через...

Связать Delphi и ОРС сервер
Вообще интересно можно ли их связать. В теории конечно можно, но вот как. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru