인터넷 기능 활성화
WinINet 함수를 사용하기 전에 애플리케이션은 InternetAttemptConnect 함수를 사용하여 인터넷에 연결을 시도해야 합니다. 이 함수는 전화 접속 대화 상자를 호출하여 인터넷에 대한 연결을 시작하거나 연결이 이미 있는지 확인합니다. 이 함수가 실패하면 애플리케이션이 오프라인 모드로 전환되어 인터넷에 대한 이전 연결 중에 캐시된 정보에 액세스할 수 있습니다.
InternetCheckConnection 함수를 사용하여 인터넷에 대한 연결을 확인합니다. 함수에 전달되는 URL로 지정된 서버를 ping하려고 시도합니다. FLAG_ICC_FORCE_CONNECTION 플래그가 설정되고 URL이 NULL 경우 함수는 서버 데이터베이스에 가장 가까운 서버에 대한 항목이 있는지 확인합니다. 있는 경우 함수는 해당 서버를 ping합니다.
다음으로, InternetOpen 함수를 사용하여 클라이언트 애플리케이션에서 사용하는 인터넷 연결의 특성을 설정합니다. InternetOpenhttpftp 세션을 설정하는 데 사용되는 루트 HINTERNET 핸들을 만듭니다. InternetOpen 함수에 전달된 특성이 올바른지 확인하기 위해 인터넷에 대한 연결을 테스트하지 않습니다.
InternetConnect 함수를 사용하여 특정 세션을 만듭니다. InternetConnect 전달된 인수를 사용하여 지정된 사이트에 대한 세션을 초기화하고 루트 핸들에서 분기인 HINTERNET 핸들을 만듭니다. InternetConnect FTP 세션의 경우를 제외하고 지정된 사이트에 액세스하거나 연결을 설정하려고 시도하지 않습니다. FtpFindFirstFile, FtpOpenFile및 HttpOpenRequest 함수는 InternetConnect 만든 핸들을 사용하여 지정된 사이트에 대한 연결을 설정합니다.
InternetOpen 사용
인터넷에 연결할 수 있도록 하려면 InternetOpen사용하여 루트 HINTERNET 핸들을 만들어야 합니다. 사용자 에이전트(인터넷 함수를 호출하는 애플리케이션), 인터넷에 대한 액세스 유형, 프록시 이름, 프록시를 우회하는 호스트 및 주소에 대한 정보 및 동작은 InternetOpen전달됩니다.
사용자 에이전트 설정
호출 애플리케이션은 인터넷에 액세스하는 애플리케이션 또는 엔터티의 이름을 포함하는 문자열을 InternetOpenlpszAgent 매개 변수에 제공해야 합니다. 이 문자열은 HTTP 프로토콜에서 사용자 에이전트로 사용됩니다. 예를 들어 Microsoft Internet Explorer는 "Microsoft Internet Explorer"를 사용합니다.
액세스 유형 설정
InternetOpen 세 가지 액세스 유형을 지원합니다.
- 애플리케이션이 실행 중인 시스템에서 인터넷에 직접 연결되는 경우 INTERNET_OPEN_TYPE_DIRECT 사용합니다. lpszProxyName 및 lpszProxyBypass 매개 변수는 InternetOpen에서 사용되지 않으므로 NULL로 설정해야 합니다.
- 애플리케이션이 실행 중인 시스템에서 하나 이상의 프록시 서버를 사용하여 인터넷에 액세스하는 경우 INTERNET_OPEN_TYPE_PROXY 사용합니다. InternetOpenlpszProxyName 표시된 프록시 서버를 사용하고 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 함수는 Internet Explorer가 설치된 경우에만 SOCKS 형식 프록시를 지원합니다. Internet Explorer 설치에는 SOCKS 프록시를 지원하는 데 필요한 Wsock32n.dll 파일이 포함되어 있습니다. Wsock32n.dll 재배포할 수 없습니다.
프록시 서버 나열
WinINet은 CERN 형식 프록시(HTTP에만 해당) 및 TIS FTP 프록시(FTP만 해당)의 두 가지 유형의 프록시를 인식합니다. Internet Explorer가 설치된 경우 WinINet은 SOCKS 유형 프록시도 지원합니다. InternetConnect 기본적으로 지정된 프록시가 CERN 프록시라고 가정합니다. 액세스 형식이 INTERNET_OPEN_TYPE_DIRECT 또는 INTERNET_OPEN_TYPE_PRECONFIG 설정된 경우 InternetOpenlpszProxyName 매개 변수를 NULL설정해야 합니다. 그렇지 않으면 lpszProxyName 전달되는 값은 공백으로 구분된 문자열에 프록시를 포함해야 합니다. 프록시 목록에는 프록시에 액세스하는 데 사용되는 포트 번호가 포함될 수 있습니다.
특정 프로토콜에 대한 프록시를 나열하려면 문자열이 ""<프로토콜><프로토콜>://<proxy_name>"" 형식을 따라야 합니다. 유효한 프로토콜은 HTTP, HTTPS 및 FTP입니다. 예를 들어 FTP 프록시를 나열하려면 유효한 문자열은 ""ftp=ftp://ftp_proxy_name:21"입니다. 여기서 ftp_proxy_name FTP 프록시의 이름이고 21은 프록시에 액세스하는 데 사용해야 하는 포트 번호입니다. 프록시가 해당 프로토콜에 대한 기본 포트 번호를 사용하는 경우 포트 번호를 생략할 수 있습니다. 프록시 이름이 단독으로 나열되면 특정 프록시가 지정되지 않은 모든 프로토콜의 기본 프록시로 사용됩니다. 예를 들어 ""http=https://http_proxy 기타""는 모든 HTTP 작업에서 http_proxy를 사용하고, 다른 모든 프로토콜에는 기타를 사용합니다.
기본적으로 이 함수는 lpszProxyName 지정된 프록시가 CERN 프록시라고 가정합니다. 애플리케이션은 서로 다른 프로토콜에 대해 서로 다른 프록시를 포함하여 둘 이상의 프록시를 지정할 수 있습니다. 예를 들어 ""ftp=ftp://ftp-gw HTTP=https://jericho:99 proxy""를 지정하는 경우 FTP 요청은 포트 21에서 수신 대기하는 ftp-gw 프록시를 통해 이루어지고 HTTP 요청은 포트 99에서 수신 대기하는 jericho라는 CERN 프록시를 통해 이루어집니다. 그렇지 않으면 HTTP 요청은 "proxy"라는 CERN 프록시를 통해 이루어지며, 이 프록시는 포트 80에서 수신 대기합니다. 예를 들어 애플리케이션이 FTP만 사용하는 경우 ""ftp=ftp://ftp-gw:21""을 지정할 필요가 없습니다. ""ftp-gw"만 지정할 수 있습니다. 애플리케이션은 InternetOpen반환된 핸들당 둘 이상의 프로토콜을 사용하는 경우에만 프로토콜 이름을 지정해야 합니다.
프록시 우회 목록
프록시로 전송해서는 안 되는 호스트 이름 또는 IP 주소를 프록시 바이패스 목록에 나열할 수 있습니다. 이 목록에는 지정된 패턴에 맞는 주소에 대해 애플리케이션이 프록시 서버를 우회하게 하는 와일드카드 "*"가 포함될 수 있습니다. 여러 주소와 호스트 이름을 나열하려면 프록시 바이패스 문자열에서 세미콜론으로 구분합니다. "<local>" 매크로를 지정하면 함수는 마침표가 포함되지 않은 호스트 이름에 대한 프록시를 무시합니다.
기본적으로 WinINet은 호스트 이름 "localhost", "loopback", "127.0.0.1" 또는 "[::1]"을 사용하는 요청에 대해 프록시를 바이패스합니다. 이 동작은 일반적으로 원격 프록시 서버가 이러한 주소를 제대로 해결하지 못하기 때문에 존재합니다.
Internet Explorer 9: "<-loopback>" 매크로를 사용하여 프록시 바이패스 목록에서 로컬 컴퓨터를 제거할 수 있습니다.
다음 예제에서는 다른 프록시 바이패스 문자열을 사용하여 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 서버 주소, 포트 번호, 사용자 이름, 암호 및 서비스 유형을 설정합니다.
InternetConnectInternetOpen로 만든 루트 HINTERNET 핸들을 사용하여 세션 핸들을 설정합니다. internetOpen호출에서 INTERNET_FLAG_ASYNC 플래그가 설정된 경우 internetConnect호출에는 0이 아닌 컨텍스트 값이 포함되어야 합니다.
서버 이름에는 호스트 이름(예: "www.servername.com") 또는 ASCII 점선 10진수 형식의 사이트 IP 번호(예: "10.0.1.45")가 포함될 수 있습니다.
서버 포트는 서버에 연결할 TCP/IP(Transmission Control Protocol/Internet Protocol) 포트 번호입니다. InternetConnect INTERNET_INVALID_PORT_NUMBER 값을 사용하는 경우 선택한 서비스 유형에 대한 기본 포트를 사용합니다. 다음 표에는 WinINet에 대한 서버 포트 기본값이 포함되어 있습니다.
값 | 의미 |
---|---|
인터넷_기본_FTP_포트 | 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 포트) | 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 | 익명 | 사용자의 전자 메일 이름 |
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 다른 함수가 서버에서 정보를 얻으려고 시도할 때까지 연결을 설정하지 않습니다.