delphi判断网络状态是否正常
其他
2020-03-18 11:25:37
阅读次数: 0
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;
发布了61 篇原创文章 ·
获赞 6 ·
访问量 5552
转载自blog.csdn.net/pulledup/article/details/104584564