WinHttpConnect-Funktion (winhttp.h)

Die WinHttpConnect-Funktion gibt den anfänglichen Zielserver einer HTTP-Anforderung an und gibt ein HINTERNET-Verbindungshandle an eine HTTP-Sitzung für dieses anfängliche Ziel zurück.

Syntax

WINHTTPAPI HINTERNET WinHttpConnect(
  [in] HINTERNET     hSession,
  [in] LPCWSTR       pswzServerName,
  [in] INTERNET_PORT nServerPort,
  [in] DWORD         dwReserved
);

Parameter

[in] hSession

Gültiges HINTERNET WinHTTP-Sitzungshandle, das von einem vorherigen Aufruf von WinHttpOpen zurückgegeben wurde.

[in] pswzServerName

Zeiger auf eine NULL-beendete Zeichenfolge, die den Hostnamen eines HTTP-Servers enthält. Alternativ kann die Zeichenfolge die IP-Adresse der Website in ASCII enthalten, z. B. 10.0.1.45. Beachten Sie, dass WinHttp keine internationalen Hostnamen akzeptiert, ohne sie zuerst in Punycode zu konvertieren. Weitere Informationen finden Sie unter Handling Internationalized Domain Names (IDNs).

[in] nServerPort

Ganzzahl ohne Vorzeichen, die den TCP/IP-Port auf dem Server angibt, mit dem eine Verbindung hergestellt wird. Bei diesem Parameter kann es sich um eine beliebige gültige TCP/IP-Portnummer oder einen der folgenden Werte handeln.

Wert Bedeutung
INTERNET_DEFAULT_HTTP_PORT
Verwendet den Standardport für HTTP-Server (Port 80).
INTERNET_DEFAULT_HTTPS_PORT
Verwendet den Standardport für HTTPS-Server (Port 443). Wenn Sie diesen Port auswählen, wird nicht automatisch eine sichere Verbindung hergestellt. Sie müssen weiterhin die Verwendung sicherer Transaktionssemantik angeben, indem Sie das WINHTTP_FLAG_SECURE-Flag mit WinHttpOpenRequest verwenden.
INTERNET_DEFAULT_PORT
Verwendet Port 80 für HTTP und Port 443 für Secure Hypertext Transfer Protocol (HTTPS).

[in] dwReserved

Dieser Parameter ist reserviert und muss 0 sein.

Rückgabewert

Gibt ein gültiges Verbindungshandle für die HTTP-Sitzung zurück, wenn die Verbindung erfolgreich ist, oder andernfalls NULL . Rufen Sie GetLastError auf, um erweiterte Fehlerinformationen abzurufen. Zu den zurückgegebenen Fehlercodes gehören die folgenden.

Fehlercodes BESCHREIBUNG
ERROR_WINHTTP_INCORRECT_HANDLE_TYPE
Der Typ des angegebenen Handles ist für diesen Vorgang falsch.
ERROR_WINHTTP_INTERNAL_ERROR
Ein interner Fehler ist aufgetreten.
ERROR_WINHTTP_INVALID_URL
Die URL ist ungültig.
ERROR_WINHTTP_OPERATION_CANCELLED
Der Vorgang wurde abgebrochen, in der Regel, weil das Handle, für das die Anforderung ausgeführt wurde, vor Abschluss des Vorgangs geschlossen wurde.
ERROR_WINHTTP_UNRECOGNIZED_SCHEME
Das URL-Schema konnte nicht erkannt werden oder wird nicht unterstützt.
ERROR_WINHTTP_SHUTDOWN
Die WinHTTP-Funktionsunterstützung wird heruntergefahren oder entladen.
ERROR_NOT_ENOUGH_MEMORY
Es war nicht genügend Arbeitsspeicher verfügbar, um den angeforderten Vorgang abzuschließen. (Windows-Fehlercode)

Hinweise

Auch wenn WinHTTP im asynchronen Modus verwendet wird (d. h. wenn WINHTTP_FLAG_ASYNC in WinHttpOpen festgelegt wurde), wird diese Funktion synchron ausgeführt. Der Rückgabewert gibt Erfolg oder Fehler an. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.

Nachdem die aufrufende Anwendung das von WinHttpConnect zurückgegebene HINTERNET-Handle verwendet hat, muss sie mit der WinHttpCloseHandle-Funktion geschlossen werden.

WinHttpConnect gibt den HTTP-Zielserver an. Eine Antwort kann jedoch von einem anderen Server kommen, wenn die Anforderung umgeleitet wurde. Sie können die URL des Servers ermitteln, der die Antwort sendet, indem Sie WinHttpQueryOption mit dem flag WINHTTP_OPTION_URL aufrufen.

Hinweis Informationen zu Windows XP und Windows 2000 finden Sie im Abschnitt Laufzeitanforderungen der WinHttp-Startseite .
 

Beispiele

Das folgende Beispiel zeigt, wie Sie mithilfe der Semantik sicherer Transaktionen eine Ressource von einem HTTPS-Server herunterladen. Der Beispielcode initialisiert die Anwendungsprogrammierschnittstelle (Application Programming Interface, API) von Microsoft Windows HTTP Services (WinHTTP), wählt einen HTTPS-Zielserver aus, öffnet und sendet eine Anforderung für diese sichere Ressource.
WinHttpQueryDataAvailable wird mit dem Anforderungshandle verwendet, um zu bestimmen, wie viele Daten zum Herunterladen verfügbar sind. Anschließend wird WinHttpReadData verwendet, um diese Daten zu lesen. Dieser Vorgang wird wiederholt, bis das gesamte Dokument abgerufen und angezeigt wurde.


    DWORD dwSize = 0;
    DWORD dwDownloaded = 0;
    LPSTR pszOutBuffer;
    BOOL  bResults = FALSE;
    HINTERNET  hSession = NULL, 
               hConnect = NULL,
               hRequest = NULL;

    // Use WinHttpOpen to obtain a session handle.
    hSession = WinHttpOpen( L"WinHTTP Example/1.0",  
                            WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
                            WINHTTP_NO_PROXY_NAME, 
                            WINHTTP_NO_PROXY_BYPASS, 0);

    // Specify an HTTP server.
    if (hSession)
        hConnect = WinHttpConnect( hSession, L"www.microsoft.com",
                                   INTERNET_DEFAULT_HTTPS_PORT, 0);

    // Create an HTTP request handle.
    if (hConnect)
        hRequest = WinHttpOpenRequest( hConnect, L"GET", NULL,
                                       NULL, WINHTTP_NO_REFERER, 
                                       WINHTTP_DEFAULT_ACCEPT_TYPES, 
                                       WINHTTP_FLAG_SECURE);

    // Send a request.
    if (hRequest)
        bResults = WinHttpSendRequest( hRequest,
                                       WINHTTP_NO_ADDITIONAL_HEADERS,
                                       0, WINHTTP_NO_REQUEST_DATA, 0, 
                                       0, 0);

 
    // End the request.
    if (bResults)
        bResults = WinHttpReceiveResponse( hRequest, NULL);

    // Keep checking for data until there is nothing left.
    if (bResults)
        do 
        {
            // Check for available data.
            dwSize = 0;
            if (!WinHttpQueryDataAvailable( hRequest, &dwSize))
                printf("Error %u in WinHttpQueryDataAvailable.\n", GetLastError());

            // Allocate space for the buffer.
            pszOutBuffer = new char[dwSize+1];
            if (!pszOutBuffer)
            {
                printf("Out of memory\n");
                dwSize=0;
            }
            else
            {
                // Read the Data.
                ZeroMemory(pszOutBuffer, dwSize+1);

                if (!WinHttpReadData( hRequest, (LPVOID)pszOutBuffer, 
                                      dwSize, &dwDownloaded))
                    printf( "Error %u in WinHttpReadData.\n", GetLastError());
                else
                    printf( "%s\n", pszOutBuffer);
            
                // Free the memory allocated to the buffer.
                delete [] pszOutBuffer;
            }

        } while (dwSize > 0);


    // Report any errors.
    if (!bResults)
        printf("Error %d has occurred.\n", GetLastError());

    // Close any open handles.
    if (hRequest) WinHttpCloseHandle(hRequest);
    if (hConnect) WinHttpCloseHandle(hConnect);
    if (hSession) WinHttpCloseHandle(hSession);

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows XP, Windows 2000 Professional mit SP3 [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003, Windows 2000 Server mit SP3 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile winhttp.h
Bibliothek Winhttp.lib
DLL Winhttp.dll
Verteilbare Komponente WinHTTP 5.0 und Internet Explorer 5.01 oder höher unter Windows XP und Windows 2000.

Weitere Informationen

Informationen zu Microsoft Windows HTTP-Diensten (WinHTTP)

WinHTTP-Versionen

WinHttpCloseHandle

WinHttpOpen

WinHttpOpenRequest