Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: собственный http сервер  (Прочитано 690 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн bulsoft

  • Автор темы
  • Новичок
  • *
  • Сообщений: 19
    • Просмотр профиля
собственный http сервер
« : 20 Июнь 2011, 12:42:26 »
os - ubuntu 10.10
цель - создать собственный маленький http сервер

что сделано:
установлен xinetd sudo apt-get install xinetdвыбран порт для сервера и в /etc/services добавлена строка aupu 20000/tcpв /etc/xinetd.d создан файл aupu service aupu
{
socket_type = stream
protocol = tcp
user = root
wait = no
server = /home/bulsoft/Documents/lpt/server.pl

создан файл /home/bulsoft/Documents/lpt/server.pl и назначены права на выполнение

#!/usr/bin/perl
use strict;

print "HTTP/1.0 200 OK\n";
print "Date: Sat, 01 Jan 2000 00:00:00 GMT\n";
print "Server: AUPU/0.01\n";
print "Content-type: text/html\n";
print "Connection: keep-alive\n\n";

foreach my $env_var (keys %ENV){print "$env_var=$ENV{$env_var}<BR>\n"};
print "OK";

перезапущен демон  xinetd /etc/init.d/xinetd restart

в браузере набираем http://127.0.0.1:20000 или http://127.0.0.1:20000/?n=1 или http://127.0.0.1:20000/12345
в результате:
(Нажмите, чтобы показать/скрыть)

вопрос: где брать параметры запроса ?
$ENV{'QUERY_STRING'} пуст ...




andrey_p

  • Гость
Re: собственный http сервер
« Ответ #1 : 20 Июнь 2011, 18:06:16 »
В @ARGV поищи.

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 27327
    • Просмотр профиля
Re: собственный http сервер
« Ответ #2 : 20 Июнь 2011, 18:34:37 »
Внимательно читаем http://tools.ietf.org/html/rfc2616#page-31
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн bulsoft

  • Автор темы
  • Новичок
  • *
  • Сообщений: 19
    • Просмотр профиля
Re: собственный http сервер
« Ответ #3 : 22 Июнь 2011, 11:09:28 »
В @ARGV поищи.
добавил print "$_<br>" foreach @ARGV;результат: пусто

Пользователь решил продолжить мысль 22 Июнь 2011, 11:12:26:
Внимательно читаем http://tools.ietf.org/html/rfc2616#page-31

читал очень внимательно
не нашел :(
« Последнее редактирование: 22 Июнь 2011, 11:14:15 от bulsoft »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 27327
    • Просмотр профиля
Re: собственный http сервер
« Ответ #4 : 22 Июнь 2011, 11:58:39 »
"CRLF" не нашли? У вас сервер заголовки в одну строчку лепит!!!!!
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн bulsoft

  • Автор темы
  • Новичок
  • *
  • Сообщений: 19
    • Просмотр профиля
Re: собственный http сервер
« Ответ #5 : 22 Июнь 2011, 12:02:16 »
"CRLF" не нашли? У вас сервер заголовки в одну строчку лепит!!!!!

не понял где искать ....

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 27327
    • Просмотр профиля
Re: собственный http сервер
« Ответ #6 : 22 Июнь 2011, 12:10:27 »
Не искать, а читать. 4-ю главу с самого начала.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн bulsoft

  • Автор темы
  • Новичок
  • *
  • Сообщений: 19
    • Просмотр профиля
Re: собственный http сервер
« Ответ #7 : 22 Июнь 2011, 13:02:32 »
так уже 20 раз читаю эту главу ....
подскажи  где прочитать параметры, которые передает клиент серверу ?
потому что сервер отвечает правильно и firefox как минимум его понимает (смотрю firebug-сеть)

что http://localhost:20000,  что http://localhost:20000/12345 одинаково
(Нажмите, чтобы показать/скрыть)

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 27327
    • Просмотр профиля
Re: собственный http сервер
« Ответ #8 : 22 Июнь 2011, 14:42:50 »
Что ты вообще передаёшь...
GET / HTTP/1.0<CR><LF>
Host: localhost<CR><LF>
<CR><LF>
request body...

Ответ должен быть
200 Ok HTTP/1.0<CR><LF>
Content-Type: text/...<CR><LF>
<CR><LF>
Reply body

А у тебя вместо <CR><LF> везде <LF> понатыканы.
Поставь себе cURL и проверяй.

curl -siH "Host: hostname" http://localhost:20000/ > reply

и смотри, что конкретно отвечает сервер. Лучше для смотрения использовать HEX редактор или вьювер с возможностью просмотра HEX дампа.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн bulsoft

  • Автор темы
  • Новичок
  • *
  • Сообщений: 19
    • Просмотр профиля
Re: собственный http сервер
« Ответ #9 : 22 Июнь 2011, 15:43:36 »
добавил \r
(Нажмите, чтобы показать/скрыть)

результат такой же
(Нажмите, чтобы показать/скрыть)

т.е. браузер понимает мой ответ и без \r
проблема в том что я не знаю откуда читать параметры от клиета т.е.
Код:

GET / HTTP/1.0<CR><LF>
Host: localhost<CR><LF>
<CR><LF>
request body...
где это ?

в этом примере все понятно
(Нажмите, чтобы показать/скрыть)

открыли сокет и читают оттуда, а в моем случае откуда читать, если открытием занимается xinetd ?

я так думаю STDIN, но как по тайм ауту не знаю

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 27327
    • Просмотр профиля
Re: собственный http сервер
« Ответ #10 : 22 Июнь 2011, 18:15:28 »
Читать, пока не кончатся данные.
А вообще - наверняка гугл знает точно.
У вас на самом деле два вопроса -
1. Как и откуда читать данные. Ответ есть в доках на (x)inetd
2. Какие данные читать и писать. Ответ есть в RFC2616
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн bulsoft

  • Автор темы
  • Новичок
  • *
  • Сообщений: 19
    • Просмотр профиля
Re: собственный http сервер
« Ответ #11 : 22 Июнь 2011, 18:27:09 »
точно STDIN, можно и без \r, но пусть будет по стандарту
(Нажмите, чтобы показать/скрыть)

вывод http://localhost:20000/
(Нажмите, чтобы показать/скрыть)

вывод http://localhost:20000/12345
(Нажмите, чтобы показать/скрыть)

вывод http://localhost:20000/?n=1
(Нажмите, чтобы показать/скрыть)


всем спасибо тема закрыта

 

Страница сгенерирована за 0.203 секунд. Запросов: 24.