Delphi7中测试idHttpServer,自带的idHttpServer

仅放上测试的部分代码,便于自己查看

  1 unit Unit1;
2
3 interface
4
5 uses
6 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs
7 , IdBaseComponent, IdComponent, IdTCPServer, IdCustomHTTPServer, IdHTTPServer
8 , IdThreadMgr, IdThreadMgrPool, StdCtrls, IniFiles, DB, ADODB, WinSock
9 ;
10
11 type
12 TForm1 = class(TForm)
13 IdHTTPServer1: TIdHTTPServer;
14 IdThreadMgrPool1: TIdThreadMgrPool;
15 Label1: TLabel;
16 ADOQuery1: TADOQuery;
17 ADOConnection1: TADOConnection;
18 Button1: TButton;
19 procedure FormCreate(Sender: TObject);
20 procedure IdHTTPServer1CommandGet(AThread: TIdPeerThread; ARequestInfo: TIdHTTPRequestInfo
21 ; AResponseInfo: TIdHTTPResponseInfo);
22 procedure Button1Click(Sender: TObject);
23 procedure FormDestroy(Sender: TObject);
24 private
25 procedure sqlexec(vs1,vs2:string);
26 { Private declarations }
27 public
28 { Public declarations }
29 end;
30
31 var
32 Form1: TForm1;
33
34 implementation
35
36 {$R *.dfm}
37
38 //uses untDM;
39 function GetSysComputerIP: string;
40 var
41 vHostName: array[0..255] of Char;
42 vWSData: TWSAData;
43 vHost: PHostEnt;
44 begin
45 Result := '127.0.0.1';
46 WSAstartup(2, vWSData);
47 GetHostName(@vHostName[0], SizeOf(vHostName));
48 vHost :=GetHostByName(@vHostName[0]);
49 if vHost <> nil then
50 Result :=Format('%d.%d.%d.%d', [Ord(vHost.h_addr^[0]), Ord(vHost.h_addr^[1]), Ord(vHost.h_addr^[2]), Ord(vHost.h_addr^[3])]);
51 WSACleanup;
52 end;
53
54 procedure TForm1.FormCreate(Sender: TObject);
55 var
56 ini: TIniFile;
57 begin
58 IdHTTPServer1.ThreadMgr := IdThreadMgrPool1;
59 //设置绑定参数
60 IdHTTPServer1.Active := False;
61 IdHTTPServer1.Bindings.Clear;
62 ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'config.ini');
63 try
64 IdHTTPServer1.DefaultPort := ini.ReadInteger('local', 'port', 0);
65 finally
66 ini.Free;
67 end;
68 IdHTTPServer1.Bindings.Add.IP :=GetSysComputerIP;
69 //启动服务器
70 IdHTTPServer1.Active := True;
71 ADOConnection1.Connected:=True;
72 end;
73
74 procedure TForm1.IdHTTPServer1CommandGet(AThread: TIdPeerThread; ARequestInfo: TIdHTTPRequestInfo;
75 AResponseInfo: TIdHTTPResponseInfo);
76 var
77 method, vt1,vT2: string;
78 s:string;
79 // v:TStringStream;
80 ContentStream1 : TStream;
81 i:Integer;
82 begin
83 method := ARequestInfo.Document;
84
85 ShowMessage(Utf8ToAnsi(ARequestInfo.FormParams));
86
87 //ShowMessage( ARequestInfo.RawHTTPCommand);
88 if method = '/Api/test' then
89 begin
90 vt1 := ARequestInfo.Params.Values['t1'];
91 vt2 := ARequestInfo.Params.Values['t2'];
92 AResponseInfo.ResponseNo := 0;
93 AResponseInfo.ContentType := 'text/html';
94
95 try
96 sqlexec(vt1,vt2);
97 AResponseInfo.ContentText :=vt1+vt2;
98 AResponseInfo.WriteContent;
99 finally
100
101 end;
102 end;
103 end;
104
105 procedure TForm1.sqlexec(vs1, vs2: string);
106 begin
107 ADOQuery1.Close;
108 ADOQuery1.SQL.Text:=Format('insert into dbo.table2(D,E) values(''%s'',''%s'')',[vs1,vs2]);
109 ADOQuery1.ExecSQL;
110 end;
111
112 procedure TForm1.Button1Click(Sender: TObject);
113 begin
114 ShowMessage(GetSysComputerIP);
115 end;
116
117 procedure TForm1.FormDestroy(Sender: TObject);
118 begin
119 IdHTTPServer1.Active := False;
120 ADOConnection1.Connected:=False;
121 end;
122
123 end.

---------------------------

网页Post的总不知道怎么获取参数

以下资料来源:https://blog.csdn.net/weixin_33924770/article/details/86399065

 1 procedure TFrmMain.HTTPServerCommandGet(AThread: TIdPeerThread;
2 ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
3 var
4 RespStr,recvText: string;
5 msgText: string;
6 begin
7 CoInitialize(nil);
8 try
9 try
10 msgText := 'Log|【'+FormatDateTime('yyyy-mm-dd hh:mm:ss',Now)+'】'+Format('收到请求:类型:%s, 路径:%s,来自:%s:%d',
11 [ARequestInfo.Command, ARequestInfo.Document,
12 TIdIOHandlerSocket(AThread.Connection.IOHandler).Binding.PeerIP,
13 TIdIOHandlerSocket(AThread.Connection.IOHandler).Binding.PeerPort]);
14
15 SendMessage(FrmMain.Handle,MYTHREAD_MESSAGE,Integer(@msgText),1);
16 if ARequestInfo.Command = 'GET' then
17 recvText := Utf8ToAnsi(Httpdecode(ARequestInfo.QueryParams)) //引用 Httpapp
18 else if ARequestInfo.Command = 'POST' then//post
19 recvText := Utf8ToAnsi(ARequestInfo.FormParams);
20 if (Pos(LowerCase('/api/getBusinessHallStatus'), LowerCase(ARequestInfo.Document)) = 1) then //查询营业厅状态接口
21 begin
22 RespStr := Httpserver_getBusinessHallStatus(recvText);
23 end
24 begin
25 RespStr := 'URL路径未定义';
26 end;
27 AResponseInfo.ContentType := 'text/HTML;charset=utf-8';
28 AResponseInfo.ContentText := AnsiToUtf8(RespStr);except
29 on e: Exception do
30 begin
31 msgText := 'ErrorLog|【'+FormatDateTime('yyyy-mm-dd hh:mm:ss',Now)+'】执行HTTPServerCommandGet发生异常,原因::'+e.Message;
32 SendMessage(FrmMain.Handle,MYTHREAD_MESSAGE,Integer(@msgText),1);
33 end;
34 end;
35 finally
36 CoUninitialize;
37 end;
38 end;

-----------------------------------

只是测试

Delphi中idHttpServer的更多相关文章

  1. delphi中的idhttpserver如何才能收到idhttp发送来的exe\rar文件呢

    http://zhidao.baidu.com/link?url=-q2oXqYCKBZ9OgFDEHAcQwQEY_NroHcqGvVfKW67X5sF9LdjAAB_HPXQo04VxStFVS7 ...

  2. Delphi中stringlist分割字符串的用法

    Delphi中stringlist分割字符串的用法 TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的. 常规的用法大家都知道,现在来讨论它的一些高级的用法. 1.CommaT ...

  3. delphi中exit,abort,break,continue 的区别

    from:http://www.cnblogs.com/taofengli288/archive/2011/09/05/2167553.html delphi中表示跳出的有break,continue ...

  4. Delphi中使用比较少的一些语法

    本文是为了加强记忆而写,这里写的大多数内容都是在编程的日常工作中使用频率不高的东西,但是又十分重要. ---Murphy 1,构造和析构函数: a,构造函数: 一般基于TComponent组件的派生类 ...

  5. 如何在 Delphi 中静态链接 SQLite

    搞了我几个小时,终于成功在 Delphi 中静态链接了 SQLite (v3.5.4),下一步就是研究加密了,呵呵中间其实遇到很多问题,今天累了,就不说了,改天补上 下载测试工程 下面说说方法 1.当 ...

  6. 翻箱倒柜,《Delphi中建议使用的语句》

    (*//标题:Delphi中建议使用的语句整理:Zswang连接:http://www.csdn.net/Expert/TopicView1.asp?id=724036日期:2002-06-22支持: ...

  7. delphi中break,continue, exit,abort, halt, runerror的异同

    delphi中表示跳出的有break,continue, exit,abort, halt, runerror. 1.break 强制退出循环(只能放在循环中),用于从For语句,while语句或re ...

  8. delphi中midas是什么

    Delphi中MIDAS到底是什么呢?和他相关组件是什么呢?   MIDAS(Multitiered Distributed Application Services)多层分布式应用服务.   Del ...

  9. Delphi中window消息截获的实现方式(2)

    Delphi是Borland公司提供的一种全新的WINDOWS编程开发工具.由于它采用了具有弹性的和可重用的面向对象Pascal(object-orientedpascal)语言,并有强大的数据库引擎 ...

  10. Delphi 中的 procedure of object

    转载:http://www.cnblogs.com/ywangzi/archive/2012/08/28/2659811.html 总结:TMyEvent = procedure of object; ...

随机推荐

  1. 前端项目线上部署记录 | vue-cli

    一.修改公开路径后打包;npm run build 新建一个vue.config.js文件,如果本地打开,则路径为"./',线上则'/',不加'.' module.exports = { p ...

  2. 像MIUI一样做Zabbix二次开发(4)——乐维监控定制Zabbix的方法

    做监控源于我们早期做运维服务的必然需求,我们的愿望是基于Zabbix这个强大开源平台,结合实际一线运维工作的需要+ITIL等运维理论,做成类似MIUI一样的开发.易用.实用.人性和美观的全新的监控平台 ...

  3. concat()函数

    该函数可以将多个字符串连成一个字符串.使用语法concat(str1, str2, ...)返回结果参数拼接成的字符串,如果有任何一个参数为null,则返回值为null例子1.从person表查出数据 ...

  4. python pip 下载出问题解决方法(超时出错)

    问题如下, 百度了一下找到了解决方法 这样的原因是连接不到国外的安装源,在下载的代码行中手动输入国内安装源 例如: pip install itchat -i https://pypi.tuna.ts ...

  5. SAP 结构转JSON

    *使用方式 jsonstr = zui2_json=>serialize( data = ls_in compress = abap_true pretty_name = zui2_json=& ...

  6. react 富文本编辑器

    5大富文本编辑器今天,富文本编辑器被用于许多应用中,包括简单的博客和复杂的内容管理系统.然而,选择一个并不容易,因为有很多具有不同功能的编辑器. 因此,在这篇文章中,我将评估5个React的富文本编辑 ...

  7. map函数中调用多个async await请求出现的promise问题解决

    以上这个打印会返回[promise,promise,promise]那么是什么原因造成的呢?我们先来一个方法解决: 但是以上这种解决方式并没有真正解决问题,还是会返回一个[promise,promis ...

  8. new关键字解析

    new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例.new 关键字会进行如下的操作: 创建一个空的简单JavaScript对象(即{}): 链接该对象(即设置该对象的构造函数 ...

  9. Mac Google浏览器 Chrome

    Mac Google浏览器 Chrome https://590m.com/f/28636472-500465601-d4c369 (访问密码:7410)

  10. react 学习笔记更新

    生命周期 插槽 组件中间内容用this.props.children访问 是否组件更新 shouldcompontsupdata(props,newstatus){ return false: } 父 ...