• 用Delphi检测一个url地址是否正确


          前面在做文件下载的时候,有时会遇到url指定的文件并不存在,所以在下载过程中会出现一些错误,尽管这些错误可以except掉,但还是需事先检测一下,如果url不正确则不用再调用download过程了。下面的函数可以进行检测并函数返回boolean型值:

     1 function TFrameChannel.CheckUrl(url: string; TimeOut: Integer = 5000): boolean;
     2 var
     3   hSession, hfile : hInternet;
     4   dwindex, dwcodelen: dword;
     5   dwcode: array[1..20] of char;
     6   res: pchar;
     7   re: integer;
     8   Err1: integer;
     9   j: integer;
    10 begin
    11   if pos('http://', lowercase(url)) = 0 then
    12     url := 'http://' + url;
    13   Result := false;
    14   hSession := nil;
    15   hFile := nil;
    16 
    17   //设置超时
    18   InternetSetOption(hSession, Internet_OPTION_CONNECT_TIMEOUT, @TimeOut, 4);
    19   hSession := InternetOpen('Mozilla/4.0', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
    20   if assigned(hsession) then begin
    21     j := 1;
    22     while true do begin
    23       hfile := InternetOpenUrl(hsession, pchar(url), nil, 0, INTERNET_FLAG_RELOAD, 0);
    24       if hfile = nil then begin
    25         j := j + 1;
    26         Err1 := GetLastError;
    27         if j > 5 then break;
    28         if (Err1 <> 12002) or (Err1 <> 12152) then break;
    29         sleep(2);
    30       end else begin
    31         break;
    32       end;
    33     end;
    34     dwIndex := 0;
    35     dwCodeLen := 10;
    36     HttpQueryInfo(hfile, HTTP_QUERY_STATUS_CODE, @dwcode, dwcodeLen, dwIndex);
    37     res := pchar(@dwcode);
    38     re := strtointdef(res, 404);
    39     case re of
    40       400..450: result := false;
    41     else result := true;
    42     end;
    43     if assigned(hfile) then
    44       InternetCloseHandle(hfile);
    45     InternetCloseHandle(hsession);
    46   end;
    47 end;
    48 

  • 相关阅读:
    spring filter and interceptor
    spring 与 swagger 2 的整合
    spring 异步操作
    图片延迟加载 jquery,lazyload.js 调用的demo
    一、Spring的第一个课时
    线程的基本了解
    HTTPS/HTTP监听常见问题
    Leetcode 118 杨辉三角
    HashSet的源码解释
    HashMap源码理解
  • 原文地址:https://www.cnblogs.com/taobataoma/p/728269.html
Copyright © 2020-2023  润新知