Delphi 如何解析网址?

2022-11-15 16:24:13 作者:admin

本文整理自网络,侵删。

 演示:

unit Unit3;
interface
uses  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type  TForm3 = class(TForm)    Memo1: TMemo;    procedure FormCreate(Sender: TObject);  private    { Private declarations }  public    { Public declarations }  end;
var  Form3: TForm3;
implementation
{$R *.dfm}
usesIdURI;
procedure TForm3.FormCreate(Sender: TObject);
var  URI: TIdURI;beginURI := TIdURI.Create('http://login:password@somehost.somedomain.com:8080/some_path/something_else.html?param1=val?m2=val');try  // Protocol = URI.Protocol  // Username = URI.Username  // Password = URI.Password  // Host = URI.Host  // Port = URI.Port  // Path = URI.Path  // Query = URI.Params    Memo1.Lines.Add(URI.Protocol);      Memo1.Lines.Add(URI.Username);        Memo1.Lines.Add(URI.Password);
  Memo1.Lines.Add(URI.Host);  Memo1.Lines.Add(URI.Port);  Memo1.Lines.Add(URI.Path);  Memo1.Lines.Add(URI.Params);

finally  URI.Free;end;end;
end.

另外一个方案:


{$APPTYPE CONSOLE}

uses
  Windows,
  SysUtils,
  WinInet;

procedure ParseURL(const lpszUrl: string);
var
  lpszScheme      : array[0..INTERNET_MAX_SCHEME_LENGTH - 1] of char;
  lpszHostName    : array[0..INTERNET_MAX_HOST_NAME_LENGTH - 1] of char;
  lpszUserName    : array[0..INTERNET_MAX_USER_NAME_LENGTH - 1] of char;
  lpszPassword    : array[0..INTERNET_MAX_PASSWORD_LENGTH - 1] of char;
  lpszUrlPath     : array[0..INTERNET_MAX_PATH_LENGTH - 1] of char;
  lpszExtraInfo   : array[0..1024 - 1] of char;
  lpUrlComponents : TURLComponents;
begin
  ZeroMemory(@lpszScheme, SizeOf(lpszScheme));
  ZeroMemory(@lpszHostName, SizeOf(lpszHostName));
  ZeroMemory(@lpszUserName, SizeOf(lpszUserName));
  ZeroMemory(@lpszPassword, SizeOf(lpszPassword));
  ZeroMemory(@lpszUrlPath, SizeOf(lpszUrlPath));
  ZeroMemory(@lpszExtraInfo, SizeOf(lpszExtraInfo));
  ZeroMemory(@lpUrlComponents, SizeOf(TURLComponents));

  lpUrlComponents.dwStructSize      := SizeOf(TURLComponents);
  lpUrlComponents.lpszScheme        := lpszScheme;
  lpUrlComponents.dwSchemeLength    := SizeOf(lpszScheme);
  lpUrlComponents.lpszHostName      := lpszHostName;
  lpUrlComponents.dwHostNameLength  := SizeOf(lpszHostName);
  lpUrlComponents.lpszUserName      := lpszUserName;
  lpUrlComponents.dwUserNameLength  := SizeOf(lpszUserName);
  lpUrlComponents.lpszPassword      := lpszPassword;
  lpUrlComponents.dwPasswordLength  := SizeOf(lpszPassword);
  lpUrlComponents.lpszUrlPath       := lpszUrlPath;
  lpUrlComponents.dwUrlPathLength   := SizeOf(lpszUrlPath);
  lpUrlComponents.lpszExtraInfo     := lpszExtraInfo;
  lpUrlComponents.dwExtraInfoLength := SizeOf(lpszExtraInfo);

  InternetCrackUrl(PChar(lpszUrl), Length(lpszUrl), ICU_DECODE or ICU_ESCAPE, lpUrlComponents);

  Writeln(Format('Protocol : %s',[lpszScheme]));
  Writeln(Format('Host     : %s',[lpszHostName]));
  Writeln(Format('User     : %s',[lpszUserName]));
  Writeln(Format('Password : %s',[lpszPassword]));
  Writeln(Format('Path     : %s',[lpszUrlPath]));
  Writeln(Format('ExtraInfo: %s',[lpszExtraInfo]));
end;

begin
  try
   ParseURL('http://login:password@somehost.somedomain.com/some_path/something_else.html?param1=val&param2=val');
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  readln;
end.
这将返回
Protocol : http
Host     : somehost.somedomain.com
User     : login
Password : password
Path     : /some_path/something_else.html
ExtraInfo: ?param1=val&param2=val

相关阅读 >>

Delphi kbmmw安装

Delphi做繁体简体转换

Delphi使用json解析调用淘宝ip地址库rest api 示例

Delphi如何粘贴html格式文本到windows剪切板

Delphi idftp连接

Delphi生成guid的两种方法

Delphi pc喇叭发声

Delphi webbrowser同时访问两个网址导致程序出错的解决办法

Delphi篇之写托盘图标

Delphi memo中禁止汉字

更多相关阅读请进入《Delphi》频道 >>



在线咨询 拨打电话