问题的由来:最近在程序中经常要用到和网页数据的交互,因此,想用WinInet的API做一个HTTP客户端组件。其中涉及到了对URL解析的一些问题。软件开发使用的版本是DELPHI6,在调用InternetCrackUrl进行URL解析时一直没有成功,通过GetLastError得知是参数错误。对比了WinInet中TURLComponents结构体定义与WINDOWS文档的定义,发现二者的结构定义不同。直接修改WinInet貌似不是可行的办法。因此将WinInet.pas文件拷贝一个副本,重命名为WinHttp.pas,在该文件中重新定义TURLComponents结构为
type
PURLComponents = ^URL_COMPONENTS;
URL_COMPONENTS = Record
dwStructSize:DWORD;
lpszScheme:PChar;
dwSchemeLength:DWORD;
nScheme:TInternetScheme;
lpszHostName:PChar;
dwHostNameLength:DWORD;
nPort:INTERNET_PORT;
lpszUserName:PChar;
dwUserNameLength:DWORD;
lpszPassword:PChar;
dwPasswordLength:DWORD;
lpszUrlPath:PChar;
dwUrlPathLength:DWORD;
lpszExtraInfo:PChar;
dwExtraInfoLength:DWORD;
end;
在引用中将WinInet替换为WinHttp,
测试代码如下:
type