InternetCrackUrl URLの分解

Cの宣言:

BOOL InternetCrackUrl(
	IN LPCSTR Url,
	IN DWORD UrlSize,
	IN DWORD Flags,
	IN OUT LPURL_COMPONENTS UrlComponents);

説明:

URLを各構成要素に分解する。

分解結果を受け取るUrlComponentsの各メンバには、格納するバッファへのポインタおよびバッファのサイズをあらかじめ設定しておかなければならない。ポインタをNULLとし、バッファサイズを0でない値とした場合、Urlで指定した文字列中の構成要素へのポインタおよびそのサイズが返却される。共にNULLおよび0の場合はその構成要素に関する情報は返却されない。

引数の意味は以下の通り。
Url 分解するURL。
UrlSize Urlのサイズ。0を指定した場合自動的に計算される。
Flags 分解方法を指定するフラグ。後述の表を参照。
UrlComponents 分解結果。

Flagsに指定可能な値は以下のいずれかのフラグである。
ICU_ESCAPE 不正な文字をエスケープシーケンスに変換する。
ICU_DECODE エンコードされている文字をデコードする。この場合ユーザは各構成要素のバッファを指定していなければならない。

戻り値は、関数の実行に成功したか否かを表す真偽値である。

Cのサンプル:

InternetCrackUrlを使用して、“http://hoge:henyo@www.cool.ne.jp:8080/masapico/api_sample.index”というURLを分解し、各構成要素を表示する。
void CrackUrl()
{
	URL_COMPONENTS uc;
	char Scheme[1000];
	char HostName[1000];
	char UserName[1000];
	char Password[1000];
	char UrlPath[1000];
	char ExtraInfo[1000];

	uc.dwStructSize = sizeof(uc);
	uc.lpszScheme = Scheme;
	uc.lpszHostName = HostName;
	uc.lpszUserName = UserName;
	uc.lpszPassword = Password;
	uc.lpszUrlPath = UrlPath;
	uc.lpszExtraInfo = ExtraInfo;

	uc.dwSchemeLength = 1000;
	uc.dwHostNameLength = 1000;
	uc.dwUserNameLength = 1000;
	uc.dwPasswordLength = 1000;
	uc.dwUrlPathLength = 1000;
	uc.dwExtraInfoLength = 1000;

	InternetCrackUrl(
		"http://hoge:henyo@www.cool.ne.jp:8080/masapico/api_sample.index",
		0, 0, &uc);

	printf("scheme: '%s'\n", uc.lpszScheme);
	printf("host name: '%s'\n", uc.lpszHostName);
	printf("port: %d\n", uc.nPort);
	printf("user name: '%s'\n", uc.lpszUserName);
	printf("password: '%s'\n", uc.lpszPassword);
	printf("url path: '%s'\n", uc.lpszUrlPath);
	printf("extra info: '%s'\n", uc.lpszExtraInfo);
	
	printf("scheme type: ");
	switch(uc.nScheme) {
		case INTERNET_SCHEME_PARTIAL: printf("partial.\n"); break;
		case INTERNET_SCHEME_UNKNOWN: printf("unknown.\n"); break;
		case INTERNET_SCHEME_DEFAULT: printf("default.\n"); break;
		case INTERNET_SCHEME_FTP: printf("FTP.\n"); break;
		case INTERNET_SCHEME_GOPHER: printf("GOPHER.\n"); break;
		case INTERNET_SCHEME_HTTP: printf("HTTP.\n"); break;
		case INTERNET_SCHEME_HTTPS: printf("HTTPS.\n"); break;
		case INTERNET_SCHEME_FILE: printf("FILE.\n"); break;
		case INTERNET_SCHEME_NEWS: printf("NEWS.\n"); break;
		case INTERNET_SCHEME_MAILTO: printf("MAILTO.\n"); break;
		default: printf("%d\n", uc.nScheme);
	}
}

(original text:1999/04/16 更新)

本ドキュメントの内容は保証しません。本ドキュメントによって生じた結果について、一切の責任を負いません。