델파이에서 URL 파싱하기. (웹 주소를 요소별로 나누기.)
절름발이 프로그래머/Delphi / 2009. 8. 6. 15:13
http://www.microsoft.com/download/iexplorer/down.php?id=3
위와 같은 URL 즉, 웹 주소가 있는 경우,
여러 프로그래밍 상황에서 각 요소별로 나누어야 되는 상황이 많이 발생합니다.
다시 말해서, URL을 파싱해야 되는 상황이라면,
전 그전까지 AppControls에 있는 acHTTP 모듈에 있는
ParseURL(EdtDownloadURL.Text, Protocol, HostName, URLPath, Username, Password, ExtraInfo, Port);
함수를 사용했습니다만,
델파이 2009를 사용하면서, (델파이 2009에서 AppControls가 컴파일이 안됩니다.)
위 함수를 대체하기 위해서 다음을 사용하게 되었습니다.
참고한 곳은
입니다.
UnitURLIPv6 라는 모듈입니다.
위 링크에 있는 것을 바로 사용할 수 있는 것이 아니었습니다.
하나의 모듈을 더 찾아서 사용해야하고, 소스중에 필요한 함수 하나를 대체하였습니다.
결국, 수정된 UnitURLIPv6.pas 와 synautil.pas 파일이 있어야만 동작합니다.
두 파일은 각각 다운받을 수 있습니다.
두 소스를 프로젝트에 포함시키고, 다음과 같이 사용합니다.
uses UnitURLIPv6;
var
errcode : Integer;
URLInfo : URL;
begin
...
...
// URL을 파싱해서, 각 요소별로 구분한다.
url_parse(EdtURL.Text, errcode, @URLInfo);
...
...
end;
정상적인 URL 파싱이면 errcode가 0으로 리턴됩니다.
에러상황이면 각각의 에러 코드가 errcode에 들어갈 것 같습니다.
URLInfo에 URL의 각 요소가 들어가게 됩니다.
URLInfo.url -> 원래의 URL 전체
URLInfo.host -> www.microsoft.com
URLInfo.port -> 80
URLInfo.path -> download/iexplorer/down.php
URLInfo.query -> id=3
URLInfo.dir -> download/iexplorer
URLInfo.file1 -> down.php
________________________________________________
type
url = record
url: string; // Original URL
scheme: url_scheme; // URL scheme
host: string; // Extracted hostname
port: word; // Port number
// URL components (URL-quoted).
path: string;
params: string;
query: string;
fragment: string;
// Extracted path info (unquoted). */
dir: string;
file1: string;
// Username and password (unquoted). */
user: string;
passwd: string;
end;