Aktivieren der Internetfunktionalität

Vor der Verwendung der WinINet-Funktionen sollte die Anwendung versuchen, mithilfe der Funktion InternetAttemptConnect eine Verbindung mit dem Internet herzustellen. Diese Funktion ruft das DFÜ-Dialogfeld auf, um eine Verbindung mit dem Internet zu initiieren oder zu überprüfen, ob bereits eine Verbindung vorhanden ist. Wenn diese Funktion fehlschlägt, kann die Anwendung in den Offlinemodus wechseln, sodass sie auf Informationen zugreifen kann, die während früherer Verbindungen mit dem Internet zwischengespeichert wurden.

Verwenden Sie die Funktion InternetCheckConnection, um die Verbindung mit dem Internet zu überprüfen. Es wird versucht, den Server zu pingen, der von der URL angegeben wird, die an die Funktion übergeben wird. Wenn das Flag FLAG _ FORCE CONNECTION festgelegt ist und die URL _ _ NULL ist, überprüft die Funktion, ob ein Eintrag in der Serverdatenbank für den nächstgelegenen Server vorhanden ist. Wenn eine vorhanden ist, pingt die Funktion diesen Server.

Verwenden Sie als Nächstes die Funktion InternetOpen, um die Merkmale der Internetverbindung festzulegen, die von der Clientanwendung verwendet wird. InternetOpen erstellt das HINTERNET-Stammhandle, das zum Einrichten von HTTP-FTP-Sitzungen verwendet wird. InternetOpen überprüft nicht die Verbindung mit dem Internet, um zu überprüfen, ob die an die Funktion übergebenen Merkmale korrekt sind.

Verwenden Sie die InternetConnect-Funktion, um eine bestimmte Sitzung zu erstellen. InternetConnect initialisiert eine Sitzung für den angegebenen Standort unter Verwendung der an ihn übergebenen Argumente und erstellt ein HINTERNET-Handle, das eine Verzweigung vom Stammhandle ist. InternetConnect versucht nur im Fall einer FTP-Sitzung, auf den angegebenen Standort zuzugreifen oder eine Verbindung damit herzustellen. Die Funktionen FtpFindFirstFile, FtpOpenFileund HttpOpenRequest verwenden das von InternetConnect erstellte Handle, um eine Verbindung mit der angegebenen Website herzustellen.

Verwenden von InternetOpen

Um eine Verbindung mit dem Internet zu aktivieren, muss ein HINTERNET-Stammhandle mithilfe von InternetOpenerstellt werden. Informationen zum Benutzer-Agent (die Anwendung, die die Internetfunktionen aufruft), den Typ des Zugriffs auf das Internet, die Proxynamen, die Hosts und Adressen, die den Proxy umgehen, und das Verhalten werden an InternetOpenübergeben.

Festlegen des Benutzer-Agents

Die aufrufende Anwendung sollte eine Zeichenfolge mit dem Namen der Anwendung oder Entität, die auf das Internet zugreift, an den lpszAgent-Parameter von InternetOpen übergeben. Diese Zeichenfolge wird als Benutzer-Agent im HTTP-Protokoll verwendet. Microsoft Internet Explorer verwendet beispielsweise "Microsoft Internet Explorer".

Festlegen von Zugriffstypen

InternetOpen unterstützt drei Zugriffstypen:

  • Verwenden Sie INTERNET _ OPEN _ TYPE _ DIRECT, wenn das System, auf dem die Anwendung ausgeführt wird, eine direkte Verbindung mit dem Internet verwendet. Die Parameter lpszProxyName und lpszProxyBypass von InternetOpen werden nicht verwendet und sollten auf NULL festgelegt werden.
  • Verwenden Sie INTERNET _ OPEN _ TYPE _ PROXY, wenn das System, auf dem die Anwendung ausgeführt wird, einen oder mehrere Proxyserver verwendet, um auf das Internet zuzugreifen. InternetOpen verwendet die durch lpszProxyName angegebenen Proxyserver und umgeht den Proxy für alle Hostnamen oder IP-Adressen, die von lpszProxyBypass angegeben werden.
  • Verwenden Sie INTERNET _ OPEN _ TYPE _ PRECONFIG, um Ihre Anwendung anzuweisen, die Konfiguration aus der Registrierung abzurufen. Dies ist in der Regel die beste Wahl, da die meisten Anwendungen, einschließlich Webbrowsern, diese Option verwenden.

INTERNET _ OPEN _ TYPE _ PRECONFIG untersucht die Registrierungswerte ProxyEnable, ProxyServer und ProxyOverride. Diese Werte befinden sich unter "HKEY _ CURRENT USER Software Microsoft Windows _ \ \ \ \ CurrentVersion Internet \ Einstellungen".

Wenn ProxyEnable 0 (null) ist, verwendet die Anwendung INTERNET _ OPEN TYPE _ _ DIRECT. Andernfalls verwendet die Anwendung INTERNET _ OPEN TYPE PROXY und die _ _ ProxyServer- und ProxyOverride-Informationen.

Die WinINet-Funktionen unterstützen SOCKS-Typproxys nur, wenn Internet Explorer installiert ist. Die Installation von Internet Explorer enthält die Wsock32n.dll-Datei, die zur Unterstützung von SOCKS-Proxys erforderlich ist. Wsock32n.dll ist nicht verteilbar.

Auflisten von Proxyservern

WinINet erkennt zwei Arten von Proxys: CERN-Typproxys (nur HTTP) und TIS FTP-Proxys (nur FTP). Wenn Internet Explorer installiert ist, unterstützt WinINet auch SOCKS-Typproxys. InternetConnect geht standardmäßig davon aus, dass der angegebene Proxy ein CERN-Proxy ist. Wenn der Zugriffstyp auf INTERNET OPEN TYPE DIRECT oder INTERNET OPEN TYPE PRECONFIG festgelegt _ _ _ _ _ _ ist, sollte der lpszProxyName-Parameter von InternetOpen auf NULL festgelegt werden. Andernfalls muss der an lpszProxyName übergebene Wert die Proxys in einer durch Leerzeichen getrennten Zeichenfolge enthalten. Die Proxyauflistungen können die Portnummer enthalten, die für den Zugriff auf den Proxy verwendet wird.

Um einen Proxy für ein bestimmtes Protokoll aufzulisten, muss die Zeichenfolge das Format "" ://<_ Proxyname>" aufweisen. Die gültigen Protokolle sind HTTP, HTTPS und FTP. Um beispielsweise einen FTP-Proxy aufzulisten, lautet eine gültige Zeichenfolge ""ftp=ftp://ftp _ proxy _ name:21", wobei ftp _ proxy name der Name des _ FTP-Proxys und 21 die Portnummer ist, die für den Zugriff auf den Proxy verwendet werden muss. Wenn der Proxy die Standardportnummer für dieses Protokoll verwendet, kann die Portnummer weggelassen werden. Wenn ein Proxyname allein aufgeführt wird, wird er als Standardproxy für alle Protokolle verwendet, für die kein bestimmter Proxy angegeben ist. Beispielsweise würde ""http= https://http_proxy other"" _ den HTTP-Proxy für alle HTTP-Vorgänge verwenden, während alle anderen Protokolle andere verwenden würden.

Standardmäßig geht die Funktion davon aus, dass der von lpszProxyName angegebene Proxy ein CERN-Proxy ist. Eine Anwendung kann mehrere Proxys angeben, einschließlich verschiedener Proxys für die verschiedenen Protokolle. Wenn Sie beispielsweise ""ftp=ftp://ftp-gw HTTP= https://jericho:99 proxy" angeben, werden FTP-Anforderungen über den ftp-gw-Proxy durchgeführt, der an Port 21 lauscht, und HTTP-Anforderungen werden über einen CERN-Proxy namens jericho durchgeführt, der an Port 99 lauscht. Andernfalls würden HTTP-Anforderungen über den CERN-Proxy namens proxy erfolgen, der an Port 80 lauscht. Wenn die Anwendung beispielsweise nur FTP verwendet, muss sie ""ftp=ftp://ftp-gw:21" nicht angeben. Es kann nur "ftp-gw" angegeben werden. Eine Anwendung ist nur erforderlich, um die Protokollnamen anzugeben, wenn sie mehr als ein Protokoll pro Handle verwendet, das von InternetOpenzurückgegeben wird.

Auflisten der Proxyumgehung

Hostnamen oder IP-Adressen, die nicht an den Proxy gesendet werden sollen, können in der Proxyumgehungsliste aufgeführt werden. Diese Liste kann Platzhalter "" * enthalten, die bewirken, dass die Anwendung den Proxyserver für Adressen umgeht, die dem angegebenen Muster entsprechen. Um mehrere Adressen und Hostnamen aufzulisten, trennen Sie sie durch Semikolons in der Proxyumgehungszeichenfolge. Wenn das Makro " " angegeben ist, umgeht die Funktion den Proxy für jeden Hostnamen, der keinen Punkt enthält.

Standardmäßig umgeht WinINet den Proxy für Anforderungen, die die Hostnamen "localhost", "loopback", "127.0.0.1" oder [ "::1" ] verwenden. Dieses Verhalten ist vorhanden, da ein Remoteproxyserver diese Adressen in der Regel nicht ordnungsgemäß auflöst.

Internet Explorer 9: Sie können den lokalen Computer mithilfe des Makros "<-loopback>" aus der Proxyumgehungsliste entfernen.

Das folgende Beispiel zeigt Beispielaufrufe von InternetOpen mithilfe verschiedener Proxyumgehungszeichenfolgen. In den Kommentaren über jedem Aufruf wird beschrieben, welche Auswirkungen die Umgehungszeichenfolge auf die Hostnamen hat, auf die über das von ihr erstellte HINTERNET-Handle zugegriffen wird.

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);

Verwenden von InternetConnect

Um eine Sitzung zu starten, muss die InternetConnect-Funktion ein Handle aus dem Stammhandle erstellen, das von der InternetOpen-Funktion zurückgegeben wird. InternetConnect legt die Serveradresse, Die Portnummer, den Benutzernamen, das Kennwort und den Diensttyp fest.

InternetConnect verwendet das von InternetOpen erstellte HINTERNET-Stammhandle, um ein Sitzungshandle einzurichten. Wenn das _ _ ASYNC-Flag INTERNET FLAG im Aufruf von InternetOpenfestgelegt wurde, sollte der Aufruf von InternetConnect einen Kontextwert ungleich 0 enthalten.

Der Servername kann entweder den Hostnamen (z.B. "www.servername.com") oder die IP-Nummer des Standorts im ASCII-Dezimalformat (z.B. "10.0.1.45") enthalten.

Der Serverport ist die TCP/IP-Portnummer (Transmission Control Protocol/Internet Protocol), mit der auf dem Server eine Verbindung hergestellt werden soll. InternetConnect verwendet den Standardport für den ausgewählten Diensttyp, wenn der Wert INTERNET _ INVALID PORT NUMBER verwendet _ _ wird. Die folgenden Tabellen enthalten die Serverportstandardeinstellungen für WinINet.

Wert Bedeutung
INTERNET_DEFAULT_FTP_PORT Verwenden Sie den Standardport für FTP-Server (Port 21).
INTERNET_DEFAULT_GOPHER_PORT Verwenden Sie den Standardport für Gopherserver (Port 70).
[!Note]
Windows XP und Windows Server 2003 R2 und früher.

INTERNET_DEFAULT_HTTP_PORT Verwenden Sie den Standardport für HTTP-Server (Port 80).
INTERNET_DEFAULT_HTTPS_PORT Verwenden Sie den Standardport für HTTPS-Server (Port 443).
INTERNET_DEFAULT_SOCKS_PORT Verwenden Sie den Standardport für SOCKS-Firewallserver (Port 1080).

Definieren von Benutzername und Kennwort

Der Wert von lpszUsername ist die Adresse einer auf NULL endende Zeichenfolge, die den Namen des Benutzers enthält, der sich anmeldet. Wenn dieser Parameter NULL ist, verwendet die Funktion einen geeigneten Standardwert, mit Ausnahme von HTTP. Ein NULL-Parameter in HTTP bewirkt, dass der Server einen Fehler zurückgibt. Für das FTP-Protokoll ist der Standardwert anonym.

Der Wert von lpszPassword ist die Adresse einer auf NULL endende Zeichenfolge, die das Anmeldekennwort enthält. Wenn sowohl lpszUsername als auch lpszPassword NULL sind, verwendet die Funktion das anonyme Standardkennwort. Im Fall von FTP ist das standardmäßige anonyme Kennwort der E-Mail-Name des Benutzers. Wenn lpszUsername nicht NULL und lpszPassword NULL ist, verwendet die Funktion ein leeres Kennwort. Es gibt vier mögliche Einstellungen für lpszUsername und lpszPassword, die die in der folgenden Tabelle gezeigten Verhaltensweisen erzeugen.

lpszUsername lpszPassword An FTP-Server gesendeter Benutzername An FTP-Server gesendetes Kennwort
NULL NULL "anonym" E-Mail-Name des Benutzers
Zeichenfolge ungleich NULL NULL lpszUsername ""
NULL Zeichenfolge ungleich NULL ERROR ERROR
Zeichenfolge ungleich NULL Zeichenfolge ungleich NULL lpszUsername lpszPassword

Diese Informationen können mithilfe der Funktionen InternetSetOption und InternetErrorDlg geändert werden. InternetSetOption ändert die Werte für Benutzername und Kennwort, während InternetErrorDlg ein Dialogfeld anzeigt, in dem der richtige Benutzername und das richtige Kennwort angefordert werden.

Definieren der Sitzung

Legen Sie zum Definieren der Sitzung, die eingerichtet wird, den Diensttyp, die Flags und den Kontextwert für InternetConnectfest.

Für InternetConnectstehen zwei Diensttypen zur Verfügung: INTERNET _ SERVICE FTP und INTERNET SERVICE _ _ _ HTTP. INTERNET _ SERVICE HTTP wird sowohl für _ HTTP- als auch für HTTPS-Sitzungen verwendet.

INTERNET _ FLAG _ PASSIVE ist das einzige dienstspezifische Flag, das von den WinINet-Funktionen verwendet wird. Dieses Flag kann festgelegt werden, wenn der Diensttyp INTERNET _ SERVICE _ FTP ist, um passive FTP-Semantik zu verwenden.

Für alle synchronen Vorgänge sollte der Wert von dwContext auf 0 (null) festgelegt werden. Wenn asynchrone Vorgänge durch Festlegen des INTERNET _ FLAG _ ASYNC-Flags im Aufruf von InternetOpeneingerichtet wurden, sollte für dwContext ein Wert ungleich 0 (null) angegeben werden. Weitere Informationen zu asynchronen Vorgängen finden Sie unter Einrichten asynchroner Vorgänge.

Bei FTP-Sitzungen versucht InternetConnect, eine Verbindung mit dem Server im Internet herzustellen. Bei HTTP-Sitzungen stellt InternetConnect erst dann eine Verbindung her, wenn eine andere Funktion versucht, Informationen vom Server abzurufen.

Hinweis

WinINet unterstützt keine Serverimplementierungen. Darüber hinaus sollte sie nicht von einem Dienst verwendet werden. Verwenden Sie für Serverimplementierungen oder -dienste Microsoft Windows HTTP-Dienste (WinHTTP).