【delphi】通用 Web 服务器控件(含源码及演示程序)

来源:https://blog.csdn.net/sensor_WU/article/details/1110577981、通用Web服务控件简介Web服务已经非常普及,无论是各大平台的API回调,还是提供Restful API服务,都在使用Web服务,为此专门开发了一款通用的Web服务控件。通过该控件可以立即实现Web服务器功能,前端的任何请求,都转换成对应的事件响应,非常方便。通用Web服务控件图标:

通用Web服务控件开发语言:delphi通用Web服务控件名称:TWWW_Component1.1 控件支持的功能根据端口自动支持 HTTP 或者 HTTPs 服务(80-HTTP,443-HTTPs,其它端口值一律默认HTTP)支持静态文件自动下载,无需写任何代码支持JWT Token 标准认证,无需书写 JWT 任何代码支持通用 Web 请求,可以携带JWT也可以不携带,请求地址不同支持 JSON 和 XML 请求支持流文件请求支持 form-data 参数、文件请求(单一文件)支持POST、GET等方法支持任意API名称请求1.2 关于 JWT 知识请参见知乎:https://zhuanlan.zhihu.com/p/869373251.3 控件使用说明通用 Web 服务控件,设置简单的参数,可以实现所有Web请求的响应。不同的请求,请求地址不同,响应事件也不一样!控件提供3个不同的 Web 服务基本地址参数,不同的 Web 服务使用不同的基地址。分别是:Static_Base_URL、Generic_BaseURL、JWT_BaseURL 这三个基地址表示不同的3个 Web 服务请求地址。其中 Static_BaseURL 表示下载静态文件的地址,Generic_BaseURL 表示的是通用 Web 请求的地址,JWT_BaseURL 表示的是需要使用 JWT Token 的Web 通用请求地址。默认 Web_port 是 80 端口,如果不是 80或者443 端口,请在 localhost 后加上端口号,如果是 443 端口,请使用 https 请求!静态下载文件举例:下载文件举例参数设置如下:Static_BaseURL :Static //可以多级,注意前后都不需要 /,例如:Static/ShenZhenStatic_RootDir :F:\SZHN //可以多级目录,,例如:D:\Document\Download在 F盘的 SZHN 目录下包含如下文件:F:\SZHN\A.txtF:\SZHN\20201204\ABC.pdf下载文件的地址组合: http://localhost/   +  Static_BaseURL  +  /  +  文件目录(相对Static_RootDir的目录)  +  /   +  文件名   其中 localhost 可以是服务器的域名或者IP地址。在浏览器地址输入如下地址即可实现文件下载。例如    下载 A.txt 文件: http://localhost/Static/A.txt下载 ABC.pdf :    http://localhost/Static/20201204/ABC.pdf下载文件不涉及响应事件,设置好参数即可自动实现。123456789101.4 不同请求响应事件对照表事件请求地址需要JWT Tokenform-data提交字符串请求流请求OnRequestJWTGeneric_BaseURL请求JWTOnRequestFormDataGeneric_BaseURL√OnRequestFormData_JWTJWT_BaseURL√√OnRequestGenericGeneric_BaseURL√OnRequestGeneric_StreamGeneric_BaseURL√OnRequestGenericJWTJWT_BaseURL√OnRequestGenericJWT_StreamJWT_BaseURL√2、控件属性、方法、事件

2.1 控件属性序号名称类型说明1Web_Address字符串设置当前控件的Web地址。可以是域名地址或者是IP2Web_Port数字型Web 服务的端口,默认:80,如果使用 HTTPS 则应该设置为4433Static_BaseURL字符串静态文件下载的基地址4Static_RootDir字符串静态文件下载对应的本地文件基本路径5Generic_BaseURL字符串通用Web 请求 基地址6JWT_BaseURL字符串使用 JWT 的通用Web请求基地址7JWT_Secret字符串生成 JWT Token 的密钥8JWT_Timeout数字型JWT Token 的有效期长度,单位:秒9log逻辑性是否记录系统日志, 默认:True 表示需要记录2.2 控件方法2.2.1 StartServer(打开Web服务器)打开WWW_Component服务,保证API请求功能正常。如果打开成功,函数返回True,表示可以使用API功能,否则返回False,错误信息在ErrorMsg中查看,此时不能使用Web服务。function  StartServer(var ErrorMsg : string) : Boolean;12.2.2 StopServer(关闭Web服务)关闭Web服务功能。关闭后将不能在响应Web请求功能!procedure StopServer;12.2.3 WriteLog (书写日志功能)书写日志函数。参数说明:Msg :需要写入记录的内容日志文件名称: 主程序名称 + ( + 支付控件名称 + )+ _Customer.TXTprocedure writelog(msg : string);   //书写日志12.2.4 Format_JSON (格式化JSON字符串)格式化JSON字符串,便于阅读。参数说明:JSONStr :表示需要格式化的JSON字符串,如果不是合法的JSON字符串,则不进行任何处理Indented : 表示前面是否证件 Tab 缩进,这样在日志中更美观结果为已经格式化的JSON字符串。function Format_JSON(JSONStr : string; Indented : Boolean = True) : string;12.2.5 Format_XML(格式化XML)格式化XML,以便容易查看。参数说明:XML:表示需要进行格式化的XML字符串indent:表示格式化后每行前面是否增加一个Tab,以便XML不会太靠近编辑器的左边,主要为了记录日志更美观!function Format_XML(XML : string; indent : Boolean = True) : string;1格式化前:<return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[appid参数长度有误]]></return_msg>格式化后:

2.3 控件事件特别说明:在事情响应函数中,字符串都是使用的 PChar 类型,不是 String 类型,在使用的过程中需要注意,尤其是在字符串的合并计算过程中需要注意!2.3.1 OnError(错误事件)控件运行出现错误时会触发这个事件。//0. 错误事件 TOnError      = procedure(Sender : TObject; errcode,errmsg : PChar) of object;12参数说明:errcode:错误代码,一般会标明出现错误的函数名称等errmsg:错误信息详细描述2.3.2 OnRequestJWT(请求JWT Token事件)对于 JWT 服务,首先必须获取到 JWT Token,通过这个 Token 才可以继续访问相关的API。//1. 获取 JWT token的登录事件                                                            //额外信息 TOnRequestJWT = procedure(Sender : TObject; usercode,userpassword, useragent : PChar; var JWTSecret, extraInfo : PChar; var JWTTimeout : integer; var allow : Boolean) of object;12参数说明:前端请求 JWT 的时候会上送 usercode,userpassword,useragent 这三个参数,事实上,前端请求真正上送的参数是 usercode,userpassword,并不包含 useragent 参,是系统自动获取的。在该事件处理函数中,应该根据这三个参数确定返回给前端的 JWT 的参数,包括:JWTSecret,extraInof,JWTTimeout 这三个参数。如果经过确认不希望给前端返回 JWT,那么直接设置 allow 为False 即可。否则可以设置这三个参数JWTSecret,extraInof,JWTTimeout,也可以不设置,如果不设置这三个参数,那么系统将会使用控件自身的 JWT_Secret 和 JWT_Timeout 属性代替 JWTSecret和JWTTimeout。如果 allow 为 True,系统会自动给前端返回 JWT Token 的JSON字符串。特别说明:该事件处理函数是在线程中执行的,所以要确保线程安全!2.3.3 OnRequestFormData(通过 form-data 方式提交请求)如果客户选通过 form-data 方式提交的请求,会触发这个事件,后台可以在这个事件中进行回应。如果后台没有响应这个事件,控件将自动回复200状态码,数据信息回复空。TOnRequestFormData  = procedure(Sender : TObject; RequestURI, RequestIP, RequestMethod, RequestHead, RequestQuery, form_data_params, form_data_Filename : PChar; form_data_Stream : TStream; var ResponseDataStream : TStream; var ResponseData, content_type : PChar) of object;1序号参数属性说明1RequestURI入口参数,必有前端请求的完整URI。例如:http://localhost/JWT/SZHN?A=中国&B=12&C=ABC1232RequestIP入口参数,必有前端请求的IP3RequestMethod入口参数,必有前端请求的方法:POST、GET等4RequestHead入口参数,必有前端请求的头信息:已经转换成JSON 格式5RequestQuery入口参数,可选前端请求地址中携带的参数。已经转换成JSON格式6form_data_params入口参数,必有前端 from-data 中包含的参数,不包括文件参数7form_data_Filename入口参数,可选前端 from-data 中包含的文件按名称8form_data_Stream入口参数,可选前端 form-data 中包含的文件内容流,文件名称为:form_data_Filename9ResponseDataStream出口参数,可选后端返回给前端的数据流,这个与 ResponseData 二选一,如果都存在,在只发送 ResponseData10ResponseData出口参数,可选后端返回给前端的字符串(UTF-8),这个与 ResponseDataStream 二选一,如果都存在,只发送 ResponseData11content_type出口参数,可选后端发送给前端的内容类型,请在遵照HTTP content-type 便准书写2.3.4 OnRequestFormData_JWT(通过 form-data 方式提交请求 必须JWT)具体使用说明请参见源代码文档!2.3.5 OnRequestGeneric(通过Web请求,字符串参数请求)具体使用说明请参见源代码文档!2.3.6 OnRequestGeneric_Stream(通过Web请求,流方式参数请求)具体使用说明请参见源代码文档!2.3.7 OnRequestGenericJWT(通过Web请求,字符串方式参数请求,提供JWT Token验证)具体使用说明请参见源代码文档!2.3.8 OnRequestGenericJWT_Stream(通过Web请求,流方式参数请求,提供JWT Token验证)具体使用说明请参见源代码文档!3、无法打开服务问题解决如果打开服务时出现类似如下提示:Could not add the following Url to the server.Be sure that you have reserved the Url in Http.Sys with proper permissions.Url: http://+:80/GenericAAA说明 GenericAAA 这个路径没有在微软的 Http.Sys中配置,此时需要使用 HttpConfig 这个工具来设置就可以解决,无论是路径不存在还是端口未配置,都使用这个工具。

至此,配置已经完成,打开Web服务就不会出现问题了。4、演示、下载所有请求都可以通过浏览器或者postman 实现为了大家使用控件方便,专门做了一个演示程序,简单示范了控件的具体使用。下载的文件中包含:A. 控件可安装源代码B. 控件使用的帮助文件C. 控件使用演示程序源代码及执行文件下载地址:WWW_Component下载地址2:WWW_Component使用过程中,如果有任何问题,可以联系:QQ 910731685

(0)

相关推荐