Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2015.09.10;
Скачать: [xml.tar.bz2];

Вниз

маленький 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.55 MB
Время: 0.052 c
15-1421098202
Юрий
2015-01-13 00:30
2015.09.10
С днем рождения ! 13 января 2015 вторник


15-1417507967
alexdn
2014-12-02 11:12
2015.09.10
Статистика запуска программы


15-1412022602
Юрий
2014-09-30 00:30
2015.09.10
С днем рождения ! 30 сентября 2014 вторник


15-1418637143
alexdn
2014-12-15 12:52
2015.09.10
Альфа канал в php


15-1417987802
Юрий
2014-12-08 00:30
2015.09.10
С днем рождения ! 8 декабря 2014 понедельник





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский