Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2015.09.10;
Скачать: CL | DM;

Вниз

маленький http   Найти похожие ветки 

 
Dennis I. Komarov ©   (2014-11-12 23:00) [0]

Господа!
Есть что-нить простенькое, маленькое внутри win, чтоб контент (xml) в http  обернуть и в tcp отдать?
Или быстрее самому набросать?

P.S.
 Без монстров аки Indy


 
кгшз ©   (2014-11-12 23:21) [1]

внутри вин есть иис
маленькое это http://nodejs.org/
простенькое это http://www.apache.org/
но ты набросаешь сам на инди


 
Dennis I. Komarov ©   (2014-11-12 23:26) [2]

Нет, инди тяжкий... Мне просто к хмл хттп хидер прилепить по-сути надо. Без динамики и прочей тяжести.
Вдруг в недрах wininet есть готовая функция.


 
Rouse_ ©   (2014-11-12 23:51) [3]

Готовой нема, нужно небольшой обвес написать.
Ну типа такого, только попричесанней: http://rouse.drkb.ru/network.php#proxyload


 
Rouse_ ©   (2014-11-12 23:57) [4]

В принципе попробуй завтра ко мне стукнутся, я попробую тебе дать наш вариант, там вообще просто, тупо данные и адрес куда отправлять. Но не до конца уверен что смогу целиком это выпилить, бо у нас там тоже все разраслось и выглядит как полноценное indy (только гораздо удобней).
rouse собака grandsmeta тут точка ru


 
кгшз ©   (2014-11-13 00:00) [5]

интересно причем здесь это, если ему сервер нужен.


 
Rouse_ ©   (2014-11-13 00:04) [6]


> кгшз ©   (13.11.14 00:00) [5]
> интересно причем здесь это, если ему сервер нужен.

Я пока что не уверен что ему именно серверная реализация нужна, xml в обе стороны легко отдается, а по вопросу не понятно :)
Хотя если вопрос о сервере, тогда - да.


 
кгшз ©   (2014-11-13 00:09) [7]

по вопросу все предельно понятно.
чел хочет отдать контент по шттп на пришедший ему гет/пост.


 
Dennis I. Komarov ©   (2014-11-13 00:19) [8]

Саш, он прав :) Именно серверная

Что-то вроде:

function XMLHttpRequest(var AContent: TStringList): Boolean;
var
 HTTPContent: TStrings;
begin
 HTTPContent:=TStringList.Create;
 try
   HTTPContent.Text := AContent.Text;
   AContent.Clear;
   AContent.Add("HTTP/1.1 200 OK");
   AContent.Add("Server: Unknow");
   AContent.Add("Accept-Ranges: bytes");
   AContent.Add("Keep-Alive: timeout=5, max=100");
   AContent.Add("Connection: Keep-Alive");
   AContent.Add("Content-Type: text/xml");
   AContent.Add("Content-Length: " + IntToStr(Length(HTTPContent.Text)));
   AContent.Add("");
   AContent.Add(HTTPContent.Text);
   AContent.Add("");
 finally
   HTTPContent.Free
 end;
end;


1. За голову не поручусь, сейчас RFC покурю немного
2. Надо с юникодом грабли поискать


 
кгшз ©   (2014-11-13 00:20) [9]

если же речь о получении xml контента,
то все делается и без этого некрокода в 7 килобайт исходников.
в две строки.


 
кгшз ©   (2014-11-13 00:27) [10]

ладно.
скажу как отдать статик http-контент не имея http сервера.

протокол res://

сервером служит exe/dll, а сам контент запихан в ресурсы

http://msdn.microsoft.com/en-us/library/aa767740(v=vs.85).aspx

при этом никакие тсп-порты никем не открываются


 
Dennis I. Komarov ©   (2014-11-13 00:36) [11]

1. получатель браузер
2. res:// это локально...


 
кгшз ©   (2014-11-13 00:54) [12]

ну естественно браузер.

res:// - это не локально, это из ресурса.
если ты странный, и не хочешь сервера, то файл должен быть на шаре.
что естественно


 
Dennis I. Komarov ©   (2014-11-13 01:05) [13]

Почему не хочу? мое приложение и есть сервер.
Получил http-запрос, вернул xml. В чем странность?

P.S.
 о файлах речи не было


 
кгшз ©   (2014-11-13 01:11) [14]

если твое приложение сервер, то чего же ты еще хочешь?

или ты хочешь чтобы после того, как ты назвал свой project1.exe "сервером", он сам по себе научился быть http-сервером?

https://drive.google.com/file/d/0ByCA9Glz10r7bzdIRnJKcFpBeDg/view?usp=sharing


 
Dennis I. Komarov ©   (2014-11-13 01:19) [15]

Я в [0] написал что хочу, зачем фонтазировать глупости?

P.S.
 XYZ не актуально


 
кгшз ©   (2014-11-13 01:23) [16]

тебя же не спрашивают, зачем ты фантазируешь на тему нет ли в винде чего нибудь волшебного умеющего быть http сервером


 
кгшз ©   (2014-11-13 01:37) [17]

Почему не хочу?
потому что инди ты не хочешь, а два сервера предложенных тебе - не помогли.

мое приложение и есть сервер.
твое приложение не сервер.
было бы оно сервером, ветки бы этой не было бы вообще.

P.S.
XYZ не актуально


ну я же говорил, что
но ты набросаешь сам на инди


 
Eraser ©   (2014-11-13 02:28) [18]


> Dennis I. Komarov ©   (12.11.14 23:00) 

Indy.


 
Dennis I. Komarov ©   (2014-11-13 03:00) [19]


> Eraser ©   (13.11.14 02:28) [18]

Монстр :) Ковырялся я с ним давно, c POP3
Ну его в баню


 
Dennis I. Komarov ©   (2014-11-13 03:03) [20]


> твое приложение не сервер.
> было бы оно сервером, ветки бы этой не было бы вообще.
>

Посерверело? )


procedure TForm1.TcpServer1Accept(Sender: TObject;
 ClientSocket: TCustomIpClient);
var
 recv: AnsiString;
 HTTPContent: TStrings;
begin
 repeat
   recv:=ClientSocket.Receiveln;
 until recv = "";
 HTTPContent:=TStringList.Create;
 try
   HTTPContent.LoadFromFile("data.xml");
   if XMLHttpRequest(HTTPContent) then
     ClientSocket.Sendln(AnsiString(HTTPContent.Text));
 finally
   HTTPContent.Free;
 end
end;


 
Eraser ©   (2014-11-13 05:49) [21]


> Dennis I. Komarov ©   (13.11.14 03:00) [19]


> Ковырялся я с ним давно

ну это ж слов нет прямо ) был бы мой сотрудник - уже вещи бы собирал :-)
(на правах шутки...)

вот, ну прямо сложнейший код

procedure TfmMain.HTTPServerCommandGet(AContext: TIdContext;
 ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
 sFileName: string;
begin
 sFileName := IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0))) +
   "response.xml";
 if not FileExists(sFileName) then
   Exit;

 AResponseInfo.ServeFile(AContext, sFileName);
end;


 
Dennis I. Komarov ©   (2014-11-13 13:12) [22]


> Eraser ©   (13.11.14 05:49) [21]

Причем тут сложность этого кода?


 
Slider007 ©   (2014-11-13 14:51) [23]

http://www.rejetto.com/hfs/
Малюсенькая програмка без излишеств


 
Dennis I. Komarov ©   (2014-11-13 15:13) [24]

Да елки зеленые)))

Не нужен http-сервер мне, ни файловый, ни другой...
Мне вернуть надо xml-контент на клиента по http протоколу. Полная реализация всего http не нужна.
Инди засобой притащит кучу ненужного и тяжелого (и со своими глюками))

Спросил просто, нет ли в недрах винды готовой функции, можно без транспорта... Ну вдруг для SOAP или еще чего...


 
кгшз ©   (2014-11-13 15:18) [25]

он, когда ему говоришь, что, если не хочешь сервера ...., отвечает, "почему не хочу?"
а когда ему предлагаешь сервер, он говорит "я не хочу сервера".

Ну вдруг для SOAP или еще чего...

можешь успокоится.
нету там такого.


 
Eraser ©   (2014-11-13 15:19) [26]


> Dennis I. Komarov ©   (13.11.14 15:13) [24]


> Инди засобой притащит кучу ненужного и тяжелого (и со своими
> глюками))

извиняюсь, но это бред.
VCL притащит за собой кучу ненужного и тяжелого.
пиши на ассемблере.


 
Eraser ©   (2014-11-13 15:22) [27]

вдогонку еще можно сказать, что код какого-нибудь доморещенного "простого" сокет компонента скорее всего не будет компилироваться ни под FMX, ни под 64x даже, и тем более, код на winapi.


 
кгшз ©   (2014-11-13 15:24) [28]

можно без транспорта.

ну если можно без транспорта, то
несколько writeln в stdout таки решат твои мучения.

ответ отдашь, но правда без транспорта.
но отдашь.
но без транспорта. ага.
надо же без транспорта было.


 
Dennis I. Komarov ©   (2014-11-13 15:36) [29]


> кгшз ©   (13.11.14 15:18) [25]

Ну нету так нету, не сотрясай воздух...


 
кгшз ©   (2014-11-13 15:39) [30]

ну кто же виноват что кому-то на его простейший вопрос надо получить сотню ответов, чтобы таки наконец-то  дошло.

я что ли?


 
Dennis I. Komarov ©   (2014-11-13 15:40) [31]


> Eraser ©   (13.11.14 15:19) [26]
>
> > Dennis I. Komarov ©   (13.11.14 15:13) [24]
>
>
> > Инди засобой притащит кучу ненужного и тяжелого (и со
> своими
> > глюками))
>
> извиняюсь, но это бред.
> VCL притащит за собой кучу ненужного и тяжелого.
>


извини, но это не бред... по исходникам инди я находился уже...
я лучше через TTcpServer ручками)


 
DVM ©   (2014-11-13 16:12) [32]


> Dennis I. Komarov ©   (13.11.14 15:13) [24]
> Да елки зеленые)))
>
> Не нужен http-сервер мне, ни файловый, ни другой...
> Мне вернуть надо xml-контент на клиента по http протоколу.
>  Полная реализация всего http не нужна.
> Инди засобой притащит кучу ненужного и тяжелого (и со своими
> глюками))

Не может http сервер быть простым. Парсер http протокола - сложная вещь и тянет за собой множество других вещей как то кодировки, zip/gzip и это только парсер. А еще транспорт, который тянет за собой соеты/потоки и т.д. Да и не такой уж Indy монстр.

Самый простой вариант сделать http сервер ничего не программируя = это использовать кучу готовых микро серверов которые гуглятся по запросу "tiny http". Их реально тьма.

Самый правильный вариант - не встраивать в свою программу http сервер вообще, а использовать готовые, т.к. тогда твой софт будет масштабируемым и гибким.

Вот на паскале сервер: https://www.ritlabs.com/en/products/tinyweb/ (так себе)


 
Inovet ©   (2014-11-13 19:21) [33]

А про глубины Инди читал? В переводе АП, первая попавшаяся ссылка
http://nikipolskiy.ucoz.ru/book/glubiny_indy.pdf


 
Dennis I. Komarov ©   (2014-11-13 19:42) [34]


> DVM ©   (13.11.14 16:12) [32]

Дим, привет!

Ну да, давай tomcat прикрутим, iis добавим)))
Не нужны тут все прелести http1.1
Возможно в перспективе придется GET распарсить, но не сложно...


 
Dennis I. Komarov ©   (2014-11-13 19:47) [35]


> Inovet ©   (13.11.14 19:21) [33]

первая ссылка должны быть та, что с конференции "Сети" висит )


 
DVM ©   (2014-11-13 21:59) [36]


> Dennis I. Komarov ©   (13.11.14 19:42) [34]


> Возможно в перспективе придется GET распарсить, но не сложно.
> ..

Если только строго фиксированный вид URL и такие же заголовки запроса и один метод GET. И один единственный клиент в единицу времени. Тогда относительно просто.


 
DVM ©   (2014-11-13 22:06) [37]

Вот в Linux системах создание http сервера для своей программы упрощается тем, что там есть как правило inetd и он может принимать на вход соединения на 80 порт и отдавать/получать данные на стандартный вход/выход любой программы, т.о с сетью даже работать не придется. Да и многопоточность не нужна, т.к. для каждого соединения будет запускаться отдельный процесс. Да и апач чаще всего там тоже есть.

В Windows тоже вобщем то давно встроен IIS, ISAPI или CGI приложение для него написать не сложно.


 
Dennis I. Komarov ©   (2014-11-13 22:26) [38]


> Если только строго фиксированный вид URL и такие же заголовки
> запроса и один метод GET.

Для начала даже get не парсим, просто ждем окончания запроса #13#10

> И один единственный клиент в единицу времени.

А пофиг, хоть 1000...


 
Dennis I. Komarov ©   (2014-11-13 23:44) [39]


> просто ждем окончания запроса #13#10

правильнее CRLF


 
DVM ©   (2014-11-14 00:11) [40]


> Dennis I. Komarov ©   (13.11.14 22:26) [38]


> А пофиг, хоть 1000...

для множества клиентов код станет на порядок сложнее



Страницы: 1 2 вся ветка

Текущий архив: 2015.09.10;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.059 c
15-1413052531
wl
2014-10-11 22:35
2015.09.10
Опасное электричество


15-1420407002
Юрий
2015-01-05 00:30
2015.09.10
С днем рождения ! 5 января 2015 понедельник


6-1277233821
rooler
2010-06-22 23:10
2015.09.10
Как отправить сообщение через send, но с чужого сокета?


15-1416494832
alexdn
2014-11-20 17:47
2015.09.10
Как настроить редирект


15-1411762264
MsGuns
2014-09-27 00:11
2015.09.10
Тризна по Книге