Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Před použitím funkcí WinINet by se aplikace měla pokusit o připojení k internetu pomocí funkce InternetAttemptConnect. Tato funkce volá dialogové okno pro telefonické připojení, které zahájí připojení k internetu nebo zkontroluje, jestli připojení již existuje. Pokud tato funkce selže, může aplikace přejít do režimu offline, který umožňuje přístup k informacím uloženým v mezipaměti během předchozích připojení k internetu.
Pomocí funkce InternetCheckConnection zkontrolujte připojení k internetu. Pokusí se odeslat příkaz ping na server určený adresou URL, která je předána funkci. Pokud je nastaven příznak FLAG_ICC_FORCE_CONNECTION a adresa URL je null, funkce zkontroluje, jestli v databázi serveru pro nejbližší server existuje položka. Pokud existuje, funkce odešle příkaz ping na tento server.
Dále pomocí funkce InternetOpen určíte charakteristiky připojení k internetu, které klientská aplikace používá. InternetOpen vytvoří kořenový popisovač HINTERNET, který se používá k vytvoření relací HTTPFTP. InternetOpen neotestuje připojení k internetu, aby ověřil, zda jsou vlastnosti předané funkci správné.
Pomocí funkce InternetConnect vytvořte konkrétní relaci. InternetConnect inicializuje relaci pro zadanou lokalitu pomocí předaných argumentů a vytvoří HINTERNET popisovač, který je odvětvený od kořenového popisovače. připojení k síti InternetConnect se nepokoušá o přístup k zadané lokalitě ani se nepokusí navázat připojení, s výjimkou případů relace FTP. FtpFindFirstFile, FtpOpenFilea HttpOpenRequest funkce používají popisovač vytvořený InternetConnect k navázání připojení k zadané lokalitě.
Používání internetopenu
Chcete-li povolit připojení k internetu, musí být vytvořen kořenový popisovač HINTERNET pomocí InternetOpen. Informace o uživatelském agentu (aplikace volající internetové funkce), typ přístupu k internetu, názvy proxy serveru, hostitele a adresy, které proxy server obcházejí, a chování se předává InternetOpen.
Nastavení uživatelského agenta
Volající aplikace by měla poskytnout řetězec, který obsahuje název aplikace nebo entity přistupující k Internetu k lpszAgent parametr InternetOpen. Tento řetězec se používá jako uživatelský agent v protokolu HTTP. Například Microsoft Internet Explorer používá „Microsoft Internet Explorer“.
Nastavení typů přístupu
InternetOpen podporuje tři typy přístupu:
- Pokud systém, na kterém je aplikace spuštěná, používá přímé připojení k internetu, použijte INTERNET_OPEN_TYPE_DIRECT. Parametry lpszProxyName a lpszProxyBypassInternetOpen se nepoužívají a měly by být nastaveny na hodnotu NULL.
- Použijte INTERNET_OPEN_TYPE_PROXY, pokud systém, na kterém je aplikace spuštěná, používá pro přístup k internetu jeden nebo více proxy serverů. InternetOpen používá proxy servery označené lpszProxyName a obchází proxy pro všechny názvy hostitelů nebo IP adresy určené lpszProxyBypass.
- Pomocí INTERNET_OPEN_TYPE_PRECONFIG dejte aplikaci pokyn, aby načetla konfiguraci z registru. To je obvykle nejlepší volba, protože většina aplikací včetně webových prohlížečů tuto možnost používá.
INTERNET_OPEN_TYPE_PRECONFIG se podívá na hodnoty registru ProxyEnable, ProxyServera ProxyOverride. Tyto hodnoty jsou umístěny pod "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings".
Pokud ProxyEnable je nula, aplikace používá INTERNET_OPEN_TYPE_DIRECT. Jinak aplikace používá INTERNET_OPEN_TYPE_PROXY a používá proxyserver a informace o proxyOverridu.
Funkce WinINet poskytují podporu proxy serverů typu SOCKS pouze v případě, že je nainstalován Internet Explorer. Instalace Aplikace Internet Explorer obsahuje soubor Wsock32n.dll, který je potřeba pro podporu proxy serverů SOCKS. Wsock32n.dll není možné distribuovat.
Výpis proxy serverů
WinINet rozpozná dva typy proxy serverů: proxy servery typu CERN (jenom HTTP) a proxy servery TIS FTP (pouze FTP). Pokud je nainstalovaná aplikace Internet Explorer, winINet podporuje také proxy servery typu SOCKS. InternetConnect ve výchozím nastavení předpokládá, že zadaným proxy serverem je proxy server CERN. Pokud je typ přístupu nastavený na INTERNET_OPEN_TYPE_DIRECT nebo INTERNET_OPEN_TYPE_PRECONFIG, měl by být parametr lpszProxyNameInternetOpen nastaven na hodnotu NULL. V opačném případě musí hodnota předaná lpszProxyName obsahovat proxy v řetězci odděleném mezerami. Výpisy proxy serveru můžou obsahovat číslo portu, které se používá pro přístup k proxy serveru.
Chcete-li zobrazit seznam proxy serveru pro určitý protokol, musí řetězec dodržovat formát ""<protokol><protokol>://<proxy_name>"". Platné protokoly jsou HTTP, HTTPS a FTP. Pokud chcete například uvést proxy server FTP, platný řetězec bude ""ftp=ftp://ftp_proxy_name:21", kde ftp_proxy_name je název proxy serveru FTP a 21 je číslo portu, které se musí použít pro přístup k proxy serveru. Pokud proxy server používá výchozí číslo portu pro tento protokol, je možné číslo portu vynechat. Pokud je název proxy serveru uvedený samostatně, použije se jako výchozí proxy pro všechny protokoly, které nemají zadaný konkrétní proxy server. Například ""http=https://http_proxy jiné"" by používal http_proxy pro všechny operace HTTP, zatímco všechny ostatní protokoly by používaly jiné.
Ve výchozím nastavení funkce předpokládá, že proxy zadaná lpszProxyName je CERN proxy. Aplikace může zadat více než jeden proxy server, včetně různých proxy serverů pro různé protokoly. Pokud například zadáte ""ftp=ftp://ftp-gw HTTP=https://jericho:99 proxy", požadavky FTP se provádějí prostřednictvím proxy serveru ftp-gw, který naslouchá na portu 21 a požadavky HTTP se provádějí prostřednictvím proxy serveru CERN s názvem jericho, který naslouchá na portu 99. V opačném případě by se požadavky HTTP provedly prostřednictvím proxy serveru CERN s názvem proxy, který naslouchá na portu 80. Mějte na paměti, že pokud aplikace používá pouze FTP, například by nemusela zadávat ""ftp=ftp://ftp-gw:21". Může zadat pouze "ftp-gw". Aplikace musí specifikovat názvy protokolů, pokud používá více než jeden protokol na každý popisovač vrácený InternetOpen.
Výpis obejití proxy serveru
Názvy hostitelů nebo IP adresy, které by se neměly odesílat na proxy server, můžou být uvedené v seznamu obejití proxy serveru. Tento seznam může obsahovat zástupné cardy "*", což způsobí, že aplikace vynechá proxy server pro adresy, které odpovídají zadanému vzoru. Pokud chcete vypsat více adres a názvů hostitelů, oddělte je středníky v řetězci obejití proxy serveru. Pokud je zadáno makro "<místní>", funkce obchází proxy server u všech názvů hostitelů, které neobsahují tečku.
Ve výchozím nastavení winINet vynechá proxy pro požadavky, které používají názvy hostitelů "localhost", "loopback", "127.0.0.1" nebo "[::1]". Toto chování existuje, protože vzdálený proxy server obvykle nebude tyto adresy správně překládat.
Internet Exploreru 9: Můžete odebrat místní počítač ze seznamu obejití proxy serveru pomocí makra "<-loopback>".
Následující příklad ukazuje ukázková volání InternetOpen pomocí různých řetězců obejití proxy serveru. Komentáře nad každým voláním popisují, jaký vliv má řetězec pro obejití na názvy hostitelů, ke kterým se přistupuje z identifikátoru HINTERNET, který vytváří.
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);
Použití InternetConnect
Chcete-li zahájit relaci, musí funkce InternetConnect vytvořit popisovač z kořenového popisovače vráceného funkcí InternetOpen. InternetConnect nastaví adresu serveru, číslo portu, uživatelské jméno, heslo a typ služby.
internetconnect používá kořenový popisovač HINTERNET vytvořený InternetOpen k vytvoření popisovače relace. Pokud byl příznak INTERNET_FLAG_ASYNC nastaven ve volání InternetOpen, volání InternetConnect by mělo obsahovat nenulovou kontextovou hodnotu.
Název serveru může obsahovat název hostitele (například "www.servername.com") nebo číslo IP webu ve formátu ASCII s tečkovaným počtem desetinných míst (například 10.0.1.45).
Port serveru je číslo portu TCP/IP (Transmission Control Protocol/Internet Protocol), ke kterému se chcete připojit na serveru. InternetConnect používá výchozí port pro vybraný typ služby, pokud se použije hodnota INTERNET_INVALID_PORT_NUMBER. Následující tabulky obsahují výchozí hodnoty portu serveru pro winINet.
| Hodnota | Význam |
|---|---|
| INTERNET_DEFAULT_FTP_PORT | Použijte výchozí port pro servery FTP (port 21). |
| INTERNET_DEFAULT_GOPHER_PORT | Pro servery gopher (port 70) použijte výchozí port.
Poznámka: Pouze Windows XP, Windows Server 2003 R2 a dřívější verze. |
| INTERNET_VÝCHOZÍ_HTTP_PORT | Použijte výchozí port pro servery HTTP (port 80). |
| INTERNET_DEFAULT_HTTPS_PORT (výchozí port HTTPS pro internet) | Použijte výchozí port pro servery https (port 443). |
| INTERNET_DEFAULT_SOCKS_PORT | Pro servery brány firewall SOCKS (port 1080) použijte výchozí port. |
Definování uživatelského jména a hesla
Hodnota lpszUsername je adresa null-terminated řetězec, který obsahuje jméno uživatele, který se přihlašuje. Pokud je tento parametr null, funkce používá odpovídající výchozí hodnotu s výjimkou protokolu HTTP. Parametr NULL v protokolu HTTP způsobí, že server vrátí chybu. Pro protokol FTP je výchozí anonymní.
Hodnota lpszPassword je adresa řetězce null-terminated, který obsahuje heslo pro přihlášení. Pokud lpszUsername i lpszPassword jsou null, použije funkce výchozí anonymní heslo. V případě FTP je výchozím anonymním heslem e-mailové jméno uživatele. Pokud lpszUsername není null a lpszPassword je NULL, funkce použije prázdné heslo. Existují čtyři možná nastavení lpszUsername a lpszPassword, které vytváří chování uvedené v následující tabulce.
| lpszUsername | lpszPassword | Uživatelské jméno odeslané na server FTP | Heslo odeslané na server FTP |
|---|---|---|---|
| null | null | "anonymní" | E-mailové jméno uživatele |
| Řetězecnull | null | lpszUsername | "" |
| null | Řetězecnull | CHYBA | CHYBA |
| Řetězecnull | Řetězecnull | lpszUsername | lpszPassword |
Tyto informace lze změnit pomocí funkcí InternetSetOption a InternetErrorDlg. InternetSetOption změní hodnoty uživatelského jména a hesla, zatímco InternetErrorDlg zobrazí dialogové okno, které požaduje správné uživatelské jméno a heslo.
Definování sezení
Chcete-li definovat relaci, která se vytváří, nastavte typ služby, příznaky a kontextovou hodnotu pro InternetConnect.
Pro InternetConnect existují dva typy služeb: INTERNET_SERVICE_FTP a INTERNET_SERVICE_HTTP. INTERNET_SERVICE_HTTP se používá pro relace HTTP i HTTPS.
INTERNET_FLAG_PASSIVE je jediný příznak specifický pro službu, který používají funkce WinINet. Tento příznak lze nastavit, pokud je typ služby INTERNET_SERVICE_FTP, aby bylo možné použít pasivní sémantiku FTP.
U všech synchronních operací by hodnota dwContext měla být nastavená na nulu. Pokud byly asynchronní operace navázány pomocí nastavení příznaku INTERNET_FLAG_ASYNC ve volání funkce InternetOpen, měla by být pro dwContextzadána nenulová hodnota. Další informace o asynchronních operacích naleznete v tématu Nastavení asynchronních operací.
U relací FTP se InternetConnect pokusí navázat připojení k serveru na internetu. U relací HTTP InternetConnect nenaváže připojení, dokud se jiná funkce nepokusí získat informace ze serveru.
Poznámka
WinINet nepodporuje implementace serveru. Kromě toho by se nemělo používat v rámci služby. Pro implementace serverů nebo služby použijte microsoft Windows HTTP Services (WinHTTP).