Función WinHttpConnect (winhttp.h)
La función WinHttpConnect especifica el servidor de destino inicial de una solicitud HTTP y devuelve un identificador de conexión HINTERNET a una sesión HTTP para ese destino inicial.
Sintaxis
WINHTTPAPI HINTERNET WinHttpConnect(
[in] HINTERNET hSession,
[in] LPCWSTR pswzServerName,
[in] INTERNET_PORT nServerPort,
[in] DWORD dwReserved
);
Parámetros
[in] hSession
Identificador de sesión WinHTTP de HINTERNET válido devuelto por una llamada anterior a WinHttpOpen.
[in] pswzServerName
Puntero a una cadena terminada en null que contiene el nombre de host de un servidor HTTP. Como alternativa, la cadena puede contener la dirección IP del sitio en ASCII, por ejemplo, 10.0.1.45. Tenga en cuenta que WinHttp no acepta nombres de host internacionales sin convertirlos primero en Punycode. Para obtener más información, vea Control de nombres de dominio internacionalizados (IDN).
[in] nServerPort
Entero sin signo que especifica el puerto TCP/IP en el servidor al que se realiza una conexión. Este parámetro puede ser cualquier número de puerto TCP/IP válido o uno de los valores siguientes.
Valor | Significado |
---|---|
|
Usa el puerto predeterminado para los servidores HTTP (puerto 80). |
|
Usa el puerto predeterminado para los servidores HTTPS (puerto 443). Al seleccionar este puerto no se establece automáticamente una conexión segura. Todavía debe especificar el uso de la semántica de transacciones seguras mediante la marca WINHTTP_FLAG_SECURE con WinHttpOpenRequest. |
|
Usa el puerto 80 para HTTP y el puerto 443 para el Protocolo seguro de transferencia de hipertexto (HTTPS). |
[in] dwReserved
Este parámetro está reservado y debe ser 0.
Valor devuelto
Devuelve un identificador de conexión válido a la sesión HTTP si la conexión es correcta o NULL en caso contrario. Para recuperar información de error extendida, llame a GetLastError. Entre los códigos de error devueltos se encuentran los siguientes.
Códigos de error | Descripción |
---|---|
|
El tipo de identificador proporcionado es incorrecto para esta operación. |
|
Se ha producido un error interno. |
|
La dirección URL no es válida. |
|
La operación se canceló, normalmente porque el identificador en el que estaba funcionando la solicitud se cerró antes de que se completara la operación. |
|
No se pudo reconocer el esquema de dirección URL o no se admite. |
|
La compatibilidad con la función WinHTTP se está apagando o descargando. |
|
No había suficiente memoria disponible para completar la operación solicitada. (Código de error de Windows) |
Comentarios
Incluso cuando WinHTTP se usa en modo asincrónico (es decir, cuando se ha establecido WINHTTP_FLAG_ASYNC en WinHttpOpen), esta función funciona de forma sincrónica. El valor devuelto indica éxito o error. Para obtener información de error extendida, llame a GetLastError.
Una vez que la aplicación que realiza la llamada ha terminado de usar el identificador HINTERNET devuelto por WinHttpConnect, debe cerrarse con la función WinHttpCloseHandle .
WinHttpConnect especifica el servidor HTTP de destino, pero una respuesta puede proceder de otro servidor si se redirigió la solicitud. Puede determinar la dirección URL del servidor que envía la respuesta llamando a WinHttpQueryOption con la marca WINHTTP_OPTION_URL.
Ejemplos
En el ejemplo siguiente se muestra cómo usar la semántica de transacciones seguras para descargar un recurso desde un servidor HTTPS. El código de ejemplo inicializa la interfaz de programación de aplicaciones (API) de Servicios HTTP de Microsoft Windows (WinHTTP), selecciona un servidor HTTPS de destino y, a continuación, abre y envía una solicitud para este recurso seguro.
WinHttpQueryDataAvailable se usa con el identificador de solicitud para determinar la cantidad de datos disponibles para su descarga y, a continuación, Se usa WinHttpReadData para leer esos datos. Este proceso se repite hasta que se haya recuperado y mostrado todo el documento.
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);
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows XP, Windows 2000 Professional con SP3 [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server 2003, Windows 2000 Server con SP3 [solo aplicaciones de escritorio] |
Plataforma de destino | Windows |
Encabezado | winhttp.h |
Library | Winhttp.lib |
Archivo DLL | Winhttp.dll |
Redistribuible | WinHTTP 5.0 e Internet Explorer 5.01 o posterior en Windows XP y Windows 2000. |
Consulte también
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de