
delphi判断网络状态是否正常
发布日期:2021-05-25 19:37:06
浏览次数:27
分类:精选文章
本文共 3443 字,大约阅读时间需要 11 分钟。
delphi判断网络状态是否正常
如果网络正常才执行远程服务器Rest的CRUD( 增删改查等Put、Post、Get、Delete等请求):
private
FNetErrored:Boolean; //如果网络正常才执行远程服务器Rest的CRUD( 增删改查等Put、Post、Get、Delete等请求)
Procedure AProc;
//......
uses myFuc_UnifiedPlatForm; //:我的客户端函数方法库 //:调用下面的:RestWebService
Procedure AProc;
begin
FNetErrored:=(RestWebService.Trim).Contains('Net Error');
//:默认访问超稳定的百度搜索首页以此来判断:客户端网络问题: //:所有Rest请求或delphi dataSnap客户端请求, //:先判断客户端网络状态再开始做 if FNetErrored then begin Lbl_TotalRecs.Text:='网络异常';exit; end;
// ......
end;
// uses myFuc_UnifiedPlatForm;
//:我的客户端函数方法库 //:调用下面的:RestWebService :
function RestWebService( const ABaseUrl:string='https://www.baidu.com/'; ATimeout:Integer=100):string;overload;
//:若用于测试网络,超时时要很短默认100毫秒:参考网络ping命令的超时 var LRESTClient: TRESTClient; LRESTRequest: TRESTRequest; LRESTResponse: TRESTResponse; LResultStr:string;
LRestReqErr:ERequestError; //:异常类:uses Rest.Types LRestReqStatusCode:Integer; //:异常响应状态码:默认0:正常值200 LRestReqStatusText:string; //:异常响应状态文本:默认'' begin //2、设置Rest组件参数: LRESTClient:= TRESTClient.Create(nil); //:很重要:回调的字符集和压缩编码:FallbackCharsetEncoding LRESTClient.ResetToDefaults; //:类会被重新产生,应放到其它属性之前 LRESTClient.BaseURL:=ABaseUrl;//:重要 :设置服务器方法的资源位置 LRESTClient.HandleRedirects:=true;//:允许处理重定向:重要 //:RaiseExceptionOn500:可返回App服务器内部异常状态 LRESTResponse:= TRESTResponse.Create(nil); LRESTResponse.ResetToDefaults;
LRESTRequest:= TRESTRequest.Create(nil); LRESTRequest.ResetToDefaults; LRESTRequest.Client:=LRESTClient; LRESTRequest.Method:=TRESTRequestMethod.rmGET; LRESTRequest.Resource:=''; LRESTRequest.Response:=LRESTResponse; LRESTRequest.Timeout:=ATimeout; //:默认值100毫秒 //同步执行: try try try LRESTRequest.Execute; //产生请求异常的响应结果://LRestReqStatusCode:=200; //:正确的返回//LRestReqStatusText:='OK';//:正确的返回 except try { LRestReqErr:=ERequestError.Create( LRestReqStatusCode,LRestReqStatusText,LResultStr); if LRestReqStatusCode<>0 then //LRestReqStatusCode=0或LRestReqStatusText=''就不管什么情况反正出错了 //:如果是请求错误(不含任何网络异常和服务器错误) //:所以不管请求,只用响应来做判断 else //:是响应错误: } begin if LRESTRequest.Response.StatusCode=500 then //or:if LRESTRequest.Response.StatusText.Contains('Internal Server Erro') LResultStr:='{"result":["服务器内部错误:Internal Server Erro"]}' else //:内部服务器错误:调用了,但请求格式错误或参数错误导致不能成功产生响应 if not (LRESTRequest.Response.StatusCode=500) and not (LRESTRequest.Response.Status.SucessCreated_201) //:内部服务器无错误:调用了,但服务器无网络或服务器未能成功启动数据库问题导致不能成功产生响应 then LResultStr:='{"result":["服务器网络故障:可能Net Error或Server not started或Database Error"]}' else LResultStr:= 'ClientErrorBadRequest_400:'+BooltoStr(LRESTRequest.Response.Status.ClientErrorBadRequest_400,true) +sLineBreak+'ClientErrorUnauthorized_401:'+BooltoStr(LRESTRequest.Response.Status.ClientErrorUnauthorized_401,true) +sLineBreak+'ClientErrorForbidden_403:'+BooltoStr(LRESTRequest.Response.Status.ClientErrorForbidden_403,true) +sLineBreak+'ClientErrorNotFound_404:'+BooltoStr(LRESTRequest.Response.Status.ClientErrorNotFound_404,true) +sLineBreak+'ClientErrorNotAcceptable_406:'+BooltoStr(LRESTRequest.Response.Status.ClientErrorNotAcceptable_406,true) +sLineBreak+'ClientErrorDuplicate_409:'+BooltoStr(LRESTRequest.Response.Status.ClientErrorDuplicate_409,true) ; end; finally //LRestReqErr.Free; end; end; finally if not LResultStr.Contains('Error') then LResultStr:='{"result":["成功执行:Success"]}'; //:直接返回成功执行的Json格式字符串 end; finally //LResultStr:=LRESTRequest.Response.Content; Result:=LResultStr;//:返回Json格式字符串 //释放Rest组件: LRESTClient.Free; LRESTRequest.Free; LRESTResponse.Free; end; end;
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年05月08日 14时29分54秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
07-docker系列-使用dockerfile构建python、jenkins镜像
2023-01-23
07-使用dockerfile构建python、jenkins镜像
2023-01-23
08-docker系列-docker网络你了解多少(上)
2023-01-23
09-docker系列-docker网络你了解多少(下)
2023-01-23
1 解决XP重装后原文件夹拒绝访问
2023-01-23
10-docker系列-docker文件共享和特权模式
2023-01-23
#AMBA##AHB总线学习
2023-01-23
#C2#S2.1# 一个简单的UVM验证平台
2023-01-23
#C8# UVM中的factory机制 #S8.1.2# 到底重载?多态?
2023-01-23
#C8# UVM中的factory机制 #S8.1.3# UVM实战代码再剖析
2023-01-23
#C8# UVM中的factory机制 #S8.1.4# 约束的重载
2023-01-23
#C8# UVM中的factory机制 #S8.2.1# factory 机制重载法则
2023-01-24
#C8# UVM中的factory机制 #S8.2.2# 复杂重载方式
2023-01-24
#C8# UVM中的factory机制 #S8.2.3# 重载sequence哪些情形
2023-01-24
#C8# UVM中的factory机制 #S8.4.1# factory机制的实现
2023-01-24
#C8# UVM中的factory机制 #S8.4.3# factory机制创建实例接口
2023-01-24