인터넷 기능 사용
WinINet 함수를 사용하기 전에 애플리케이션은 InternetAttemptConnect 함수를 사용하여 인터넷에 연결하려고 시도해야 합니다. 이 함수는 전화 접속 대화 상자를 호출하여 인터넷에 대한 연결을 시작하거나 연결이 이미 있는 경우 검사. 이 함수가 실패하면 애플리케이션이 오프라인 모드로 전환되어 인터넷에 대한 이전 연결 중에 캐시된 정보에 액세스할 수 있습니다.
InternetCheckConnection 함수를 사용하여 인터넷에 대한 연결을 검사. 함수에 전달되는 URL로 지정된 서버를 ping하려고 시도합니다. FLAG_ICC_FORCE_CONNECTION 플래그가 설정되고 URL이 NULL인 경우 함수는 서버 데이터베이스에 가장 가까운 서버에 대한 항목이 있는지 확인합니다. 있는 경우 함수는 해당 서버를 ping합니다.
다음으로 InternetOpen 함수를 사용하여 클라이언트 애플리케이션에서 사용하는 인터넷 연결의 특성을 설정합니다. InternetOpen은httpftp 세션을 설정하는 데 사용되는 루트 HINTERNET 핸들을 만듭니다. InternetOpen 은 함수에 전달된 특성이 올바른지 확인하기 위해 인터넷에 대한 연결을 테스트하지 않습니다.
InternetConnect 함수를 사용하여 특정 세션을 만듭니다. InternetConnect 는 전달된 인수를 사용하여 지정된 사이트에 대한 세션을 초기화하고 루트 핸들에서 분기인 HINTERNET 핸들을 만듭니다. InternetConnect 는 FTP 세션의 경우를 제외하고 지정된 사이트에 액세스하거나 연결을 설정하려고 시도하지 않습니다. FtpFindFirstFile, FtpOpenFile 및 HttpOpenRequest 함수는 InternetConnect 에서 만든 핸들을 사용하여 지정된 사이트에 대한 연결을 설정합니다.
InternetOpen 사용
인터넷에 연결할 수 있도록 하려면 InternetOpen을 사용하여 루트 HINTERNET 핸들을 만들어야 합니다. 사용자 에이전트(인터넷 함수를 호출하는 애플리케이션), 인터넷에 대한 액세스 유형, 프록시 이름, 프록시를 우회하는 호스트 및 주소 및 동작에 대한 정보는 InternetOpen에 전달됩니다.
사용자 에이전트 설정
호출 애플리케이션은 InternetOpen의 lpszAgent 매개 변수에 인터넷에 액세스하는 애플리케이션 또는 엔터티의 이름을 포함하는 문자열을 제공해야 합니다. 이 문자열은 HTTP 프로토콜에서 사용자 에이전트로 사용됩니다. 예를 들어 Microsoft 인터넷 Explorer "Microsoft 인터넷 Explorer"을 사용합니다.
액세스 유형 설정
InternetOpen은 다음 세 가지 액세스 유형을 지원합니다.
- 애플리케이션이 실행 중인 시스템에서 인터넷에 직접 연결하는 경우 INTERNET_OPEN_TYPE_DIRECT 사용합니다. InternetOpen의 lpszProxyName 및 lpszProxyBypass 매개 변수는 사용되지 않으며 NULL로 설정해야 합니다.
- 애플리케이션이 실행 중인 시스템에서 하나 이상의 프록시 서버를 사용하여 인터넷에 액세스하는 경우 INTERNET_OPEN_TYPE_PROXY 사용합니다. InternetOpen은lpszProxyName 으로 표시된 프록시 서버를 사용하고 lpszProxyBypass로 지정된 호스트 이름 또는 IP 주소에 대해 프록시를 바이패스합니다.
- INTERNET_OPEN_TYPE_PRECONFIG 사용하여 레지스트리에서 구성을 검색하도록 애플리케이션에 지시합니다. 웹 브라우저를 포함한 대부분의 애플리케이션에서 이 옵션을 사용하기 때문에 일반적으로 가장 적합한 선택입니다.
INTERNET_OPEN_TYPE_PRECONFIG 레지스트리 값 ProxyEnable, ProxyServer 및 ProxyOverride를 확인합니다. 이러한 값은 "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" 아래에 있습니다.
ProxyEnable이 0이면 애플리케이션은 INTERNET_OPEN_TYPE_DIRECT 사용합니다. 그렇지 않으면 애플리케이션은 INTERNET_OPEN_TYPE_PROXY 사용하고 ProxyServer 및 ProxyOverride 정보를 사용합니다.
WinINet 함수는 인터넷 Explorer 설치된 경우에만 SOCKS 형식 프록시를 지원합니다. 인터넷 Explorer 설치에는 SOCKS 프록시를 지원하는 데 필요한 Wsock32n.dll 파일이 포함되어 있습니다. Wsock32n.dll 재배포할 수 없습니다.
프록시 서버 나열
WinINet은 CERN 형식 프록시(HTTP에만 해당) 및 TIS FTP 프록시(FTP만 해당)의 두 가지 유형의 프록시를 인식합니다. 인터넷 Explorer 설치된 경우 WinINet은 SOCKS 형식 프록시도 지원합니다. InternetConnect 는 기본적으로 지정된 프록시가 CERN 프록시라고 가정합니다. 액세스 형식이 INTERNET_OPEN_TYPE_DIRECT 또는 INTERNET_OPEN_TYPE_PRECONFIG 설정된 경우 InternetOpen의 lpszProxyName 매개 변수를 NULL로 설정해야 합니다. 그렇지 않으면 lpszProxyName 에 전달된 값에 공백으로 구분된 문자열에 프록시가 포함되어야 합니다. 프록시 목록에는 프록시에 액세스하는 데 사용되는 포트 번호가 포함될 수 있습니다.
특정 프로토콜에 대한 프록시를 나열하려면 문자열이 ""<protocol><protocol>://<proxy_name>" 형식을 따라야 합니다. 유효한 프로토콜은 HTTP, HTTPS 및 FTP입니다. 예를 들어 FTP 프록시를 나열하려면 유효한 문자열은 ""ftp=ftp://ftp_proxy_name:21"입니다. 여기서 ftp_proxy_name FTP 프록시의 이름이고 21은 프록시에 액세스하는 데 사용해야 하는 포트 번호입니다. 프록시가 해당 프로토콜에 대한 기본 포트 번호를 사용하는 경우 포트 번호를 생략할 수 있습니다. 프록시 이름이 단독으로 나열된 경우 특정 프록시가 지정되지 않은 프로토콜의 기본 프록시로 사용됩니다. 예를 들어 ""http=https://http_proxy other"는 모든 HTTP 작업에 http_proxy 사용하고 다른 모든 프로토콜은 다른 프로토콜을 사용합니다.
기본적으로 함수는 lpszProxyName 으로 지정된 프록시가 CERN 프록시라고 가정합니다. 애플리케이션은 서로 다른 프로토콜에 대해 서로 다른 프록시를 포함하여 둘 이상의 프록시를 지정할 수 있습니다. 예를 들어 ""ftp=ftp://ftp-gw HTTP=https://jericho:99 proxy"를 지정하는 경우 FTP 요청은 포트 21에서 수신 대기하는 ftp-gw 프록시를 통해 이루어지며, HTTP 요청은 포트 99에서 수신 대기하는 jericho라는 CERN 프록시를 통해 이루어집니다. 그렇지 않으면 HTTP 요청은 포트 80에서 수신 대기하는 프록시라는 CERN 프록시를 통해 이루어집니다. 예를 들어 애플리케이션이 FTP만 사용하는 경우 ""ftp=ftp://ftp-gw:21"을 지정할 필요가 없습니다. ""ftp-gw"만 지정할 수 있습니다. 애플리케이션은 InternetOpen에서 반환된 핸들당 둘 이상의 프로토콜을 사용하는 경우에만 프로토콜 이름을 지정해야 합니다.
프록시 바이패스 나열
프록시로 전송되지 않아야 하는 호스트 이름 또는 IP 주소는 프록시 바이패스 목록에 나열될 수 있습니다. 이 목록에는 와일드카드 "*"가 포함될 수 있으며, 이로 인해 애플리케이션이 지정된 패턴에 맞는 주소에 대해 프록시 서버를 바이패스합니다. 여러 주소 및 호스트 이름을 나열하려면 프록시 바이패스 문자열에서 세미콜론으로 구분합니다. "<local>" 매크로를 지정하면 함수는 마침표가 포함되지 않은 호스트 이름에 대해 프록시를 바이패스합니다.
기본적으로 WinINet은 호스트 이름 "localhost", "loopback", "127.0.0.1" 또는 "[::1]"을 사용하는 요청에 대해 프록시를 바이패스합니다. 이 동작은 원격 프록시 서버가 일반적으로 이러한 주소를 제대로 resolve 않기 때문에 존재합니다.
인터넷 Explorer 9: "<루프백>" 매크로를 사용하여 프록시 바이패스 목록에서 로컬 컴퓨터를 제거할 수 있습니다.
다음 예제에서는 다른 프록시 바이패스 문자열을 사용하여 InternetOpen 에 대한 샘플 호출을 보여 줍니다. 각 호출 위의 주석은 바이패스 문자열이 만드는 HINTERNET 핸들에서 액세스하는 호스트 이름에 미치는 영향을 설명합니다.
HINTERNET hInternetRoot;
/* bypass the proxy for any host name that does not
contain a period */
hInternetRoot = InternetOpen(TEXT("WinInet Example"),
INTERNET_OPEN_TYPE_PROXY,TEXT("proxy"),TEXT("<local>"), 0);
/* bypass the proxy for any host name that starts with the
letters "ms" */
hInternetRoot = InternetOpen(TEXT("WinInet Example"),
INTERNET_OPEN_TYPE_PROXY,TEXT("proxy"),TEXT("ms*"), 0);
/* bypass the proxy for any host name that contains "int",
such as "internet" and "painter" */
hInternetRoot = InternetOpen(TEXT("WinInet Example"),
INTERNET_OPEN_TYPE_PROXY,TEXT("proxy"),TEXT("*int*"), 0);
/* bypass the proxy for the host name "example" and any
host name that contains "test" */
hInternetRoot = InternetOpen(TEXT("WinInet Example"),
INTERNET_OPEN_TYPE_PROXY,TEXT("proxy"),TEXT("example *test*"), 0);
/* Disable the loopback proxy bypass for localhost */
hInternetRoot = InternetOpen(TEXT("WinInet Example"),
INTERNET_OPEN_TYPE_PROXY,TEXT("127.0.0.1:8888"),TEXT("<-loopback>"), 0);
InternetConnect 사용
세션을 시작하려면 InternetConnect 함수가 InternetOpen 함수에서 반환하는 루트 핸들에서 핸들을 만들어야 합니다. InternetConnect 는 서버 주소, 포트 번호, 사용자 이름, 암호 및 서비스 유형을 설정합니다.
InternetConnect는 InternetOpen에서 만든 루트 HINTERNET 핸들을 사용하여 세션 핸들을 설정합니다. InternetOpen 호출에서 INTERNET_FLAG_ASYNC 플래그가 설정된 경우 InternetConnect 호출에는 0이 아닌 컨텍스트 값이 포함되어야 합니다.
서버 이름에는 호스트 이름(예: "www.servername.com") 또는 ASCII 점선 소수점 형식의 사이트 IP 번호(예: "10.0.1.45")가 포함될 수 있습니다.
서버 포트는 서버에서 연결할 TCP/IP(Transmission Control Protocol/Internet Protocol) 포트 번호입니다. InternetConnect 는 INTERNET_INVALID_PORT_NUMBER 값을 사용하는 경우 선택한 서비스 유형에 대한 기본 포트를 사용합니다. 다음 표에는 WinINet에 대한 서버 포트 기본값이 포함되어 있습니다.
값 | 의미 |
---|---|
INTERNET_DEFAULT_FTP_PORT | ftp 서버의 기본 포트(포트 21)를 사용합니다. |
INTERNET_DEFAULT_GOPHER_PORT | gopher 서버의 기본 포트(포트 70)를 사용합니다.
참고: Windows XP 및 Windows Server 2003 R2 및 이전 버전만. |
INTERNET_DEFAULT_HTTP_PORT | http 서버의 기본 포트(포트 80)를 사용합니다. |
INTERNET_DEFAULT_HTTPS_PORT | https 서버의 기본 포트(포트 443)를 사용합니다. |
INTERNET_DEFAULT_SOCKS_PORT | SOCKS 방화벽 서버의 기본 포트(포트 1080)를 사용합니다. |
사용자 이름 및 암호 정의
lpszUsername 값은 로그온하는 사용자의 이름을 포함하는 null로 끝나는 문자열의 주소입니다. 이 매개 변수가 NULL인 경우 함수는 HTTP를 제외하고 적절한 기본값을 사용합니다. HTTP의 NULL 매개 변수로 인해 서버에서 오류가 반환됩니다. FTP 프로토콜의 경우 기본값은 익명입니다.
lpszPassword 값은 로그온 암호를 포함하는 null로 끝나는 문자열의 주소입니다. lpszUsername 및 lpszPassword가 모두 NULL인 경우 함수는 기본 익명 암호를 사용합니다. FTP의 경우 기본 익명 암호는 사용자의 이메일 이름입니다. lpszUsername이 NULL이 아니고 lpszPassword가 NULL인 경우 함수는 빈 암호를 사용합니다. 다음 표에 표시된 동작을 생성하는 lpszUsername 및 lpszPassword의 네 가지 가능한 설정이 있습니다.
lpszUsername | lpszPassword | FTP 서버로 전송된 사용자 이름 | FTP 서버로 보낸 암호 |
---|---|---|---|
NULL | NULL | "anonymous" | 사용자의 전자 메일 이름 |
NULL이 아닌 문자열 | NULL | lpszUsername | "" |
NULL | NULL이 아닌 문자열 | 오류 | 오류 |
NULL이 아닌 문자열 | NULL이 아닌 문자열 | lpszUsername | lpszPassword |
이 정보는 InternetSetOption 및 InternetErrorDlg 함수를 사용하여 변경할 수 있습니다. InternetSetOption 은 사용자 이름과 암호 값을 변경하고 InternetErrorDlg 는 적절한 사용자 이름과 암호를 요청하는 대화 상자를 표시합니다.
세션 정의
설정되는 세션을 정의하려면 InternetConnect에 대한 서비스 유형, 플래그 및 컨텍스트 값을 설정합니다.
InternetConnect에는 INTERNET_SERVICE_FTP 및 INTERNET_SERVICE_HTTP 두 가지 서비스 유형이 있습니다. INTERNET_SERVICE_HTTP HTTP 및 HTTPS 세션 모두에 사용됩니다.
INTERNET_FLAG_PASSIVE WinINet 함수에서 사용하는 유일한 서비스별 플래그입니다. 수동 FTP 의미 체계를 사용하기 위해 서비스 유형이 INTERNET_SERVICE_FTP 때 이 플래그를 설정할 수 있습니다.
모든 동기 작업의 경우 dwContext 값을 0으로 설정해야 합니다. InternetOpen 호출에서 INTERNET_FLAG_ASYNC 플래그를 설정하여 비동기 작업을 설정한 경우 dwContext에 대해 0이 아닌 값을 제공해야 합니다. 비동기 작업에 대한 자세한 내용은 비동기 작업 설정을 참조하세요.
FTP 세션의 경우 InternetConnect 는 인터넷에서 서버에 대한 연결을 설정하려고 합니다. HTTP 세션의 경우 InternetConnect 는 다른 함수가 서버에서 정보를 얻으려고 시도할 때까지 연결을 설정하지 않습니다.
참고
WinINet은 서버 구현을 지원하지 않습니다. 또한 서비스에서 사용하면 안 됩니다. 서버 구현 또는 서비스의 경우 WinHTTP(Microsoft Windows HTTP 서비스)를 사용합니다.