J'ai créé une application VCL et je dois créer un serveur HTTP qui fonctionne dans mon réseau. J'ai créé le code que vous pouvez voir ci-dessous:serveur Delphi IdHTTP charge html
procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
a: TStringList;
count, logN: integer;
begin
if ARequestInfo.Document = '/' then
begin
AResponseInfo.ResponseNo := 200;
AResponseInfo.ContentText := IndexMemo.Lines.Text;
Memo1.Lines.Add(' Client: ' + ARequestInfo.RemoteIP);
end
else
begin
AResponseInfo.ResponseNo := 200;
AResponseInfo.ContentText := '<html><body><b>404 NOT FOUND</b></body></html>';
end;
end;
Maintenant, je ne dispose que d'un cas de test if ARequestInfo.Document = '/' then
mais plus tard, je aurai besoin beaucoup d'entre eux. J'ai trouvé cette solution:
- Laisser un mémo sous la forme
- Ajouter le code HTML dans le mémo
- Chargez le texte de la note de service dans le
ContextText
Je ne pense pas que c'est très efficace parce que je devrais laisser tomber 20 TMemo dans ma forme et le HTML sera difficile à maintenir. J'ai pensé que je pourrais charger les pages html avec le Deployment manager
.
Dans le même dossier du projet Delphi J'ai créé un dossier appelé pages
et il contiendra les fichiers html. Je ne sais pas comment charger les pages html avec un serveur HTTP indy, donc mes questions sont les suivantes:
- Dois-je stocker les pages html quelque part dans un dossier, puis les charger en utilisant indy?
- Puis-je charger des pages html avec indy qui sont inclus dans la page de déploiement?
Remarque: Je voudrais avoir un seul exe (ce qui est le serveur http) et non un dossier avec les fichiers exe + html. La solution que j'ai trouvée fonctionne plutôt bien car j'utilise beaucoup de TMemo
pour stocker le code, mais ce n'est pas facile à maintenir.
Toujours le meilleur, vous avez résolu un gros problème ici. Je n'ai pas pensé au fait qu'il fonctionne sur un fil séparé. Merci beaucoup –
d'où vient le TranslateIntoResourceID? Même chose avec TextStartsWith mais j'ai résolu rapidement en utilisant si ARequestInfo.Document.Chars [0] = '/' puis –
"* d'où vient le TranslateIntoResourceID? *" - vous devez l'écrire vous-même. "* Même chose avec TextStartsWith *" - dans l'unité 'IdGlobal' d'Indy. –