> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Información general de xCurl

> Información general de xCurl

En este artículo se describe la biblioteca `xCurl`, una implementación de las API de [libCurl](https://curl.haxx.se/libcurl/) compatible con el Microsoft Game Development Kit (GDK). `xCurl` simplifica el desarrollo de títulos al cumplir todos los requisitos de seguridad y procedimientos recomendados sin necesidad de ninguna lógica o gestión especial en el título. Sin embargo, no admite la comunicación WebSocket. Si necesita implementar comunicación WebSocket, use [libHttpClient](/build/console-features/networking/web-requests/http-networking#libhttpclient) en su lugar.

`xCurl` se diferencia de `libCurl` en que `xCurl` está implementada sobre [WinHttp](/build/console-features/networking/web-requests/intro-winhttp) y sigue automáticamente los requisitos y procedimientos recomendados del Microsoft Game Development Kit (GDK), incluida la administración del ciclo de vida de procesos (PLM). Aunque `xCurl` es compatible a nivel de API con `libCurl`, la capa de transporte dentro de `xCurl` usa exclusivamente WinHttp y no utiliza `libCurl`. Por lo tanto, no es necesario mantener `xCurl` sincronizada con la implementación de código abierto de `libCurl`, incluidas las correcciones de errores, los números de versión, etc. Los desarrolladores pueden usar `xCurl` para mantener la misma implementación HTTP de `libCurl` en todas las plataformas cambiando solo la inclusión de un encabezado y la vinculación de una biblioteca.

Varias API de `libCurl` no están implementadas en `xCurl` porque o bien no se usan habitualmente en escenarios de desarrollo de juegos, o bien no tienen una funcionalidad equivalente en WinHttp a la que se puedan asignar. Las diferencias se describen más adelante en este artículo.

`xCurl` depende del entorno de ejecución de juegos (Gaming Runtime) y no puede inicializarse hasta que se llame a [XGameRuntimeInitialize](/reference/system/xgameruntimeinit/functions/xgameruntimeinitialize).

Para comprender cómo funcionan los métodos de `xCurl`, consulte la documentación de la [API de libCurl](https://curl.haxx.se/libcurl/c/).

<Note>Las implementaciones de `xCurl` y `WinHttp` funcionan tanto en PC con Windows como en consola XBOX sin necesidad de cambios de código.</Note>

## Soporte técnico para desarrolladores

`xCurl` funciona con WinHttp, no con `libCurl`, y forma parte del Microsoft Game Development Kit (GDK).

Las solicitudes de soporte técnico deben enviarse a través de las vías de soporte recomendadas para los títulos del Microsoft Game Development Kit (GDK), como ponerse en contacto con su representante de Microsoft o dirigirse al equipo de soporte técnico para desarrolladores a través de los foros de desarrolladores de XBOX.

## Agregar xCurl al proyecto

Para usar `xCurl` en un juego del Microsoft Game Development Kit (GDK) en un PC con Windows 10 o en una consola XBOX, incluya los encabezados y las bibliotecas del SDK de extensión de `xCurl` en su proyecto.

1. Asegúrese de instalar el Gaming Runtime Development Kit (GRDK) en su PC de desarrollo.
2. Abra el archivo .vcxproj de su juego y, a continuación, agregue el elemento siguiente. Esto vincula la biblioteca de importación e incluye *xCurl.dll* con la salida de la compilación.

```xml theme={null}
    <GDKExtLibNames>Xbox.xCurl.API</GDKExtLibNames>
```

1. `xCurl` tiene un encabezado diferente para diferenciarse de `libCurl`. En las ubicaciones donde se incluiría *curl.h* en su juego, sustituya el encabezado por *xCurl.h*, como se muestra a continuación.

```cpp theme={null}
    #include <xCurl.h>
```

## Configuración

`xCurl` es equivalente a `libCurl` compilada con las siguientes marcas de compilación.

* HTTP\_ONLY
* CURL\_NO\_OLDIES
* CURL\_DISABLE\_PROXY
* CURL\_DISABLE\_COOKIES
* CURL\_DISABLE\_DOH
* CURL\_DISABLE\_PROGRESS\_METER
* CURL\_DISABLE\_MIME
* USE\_SCHANNEL

## Inicialización de la red

`xCurl` gestiona la inicialización de la red automáticamente. Puede configurar y realizar solicitudes en cualquier momento del ciclo de vida de su título. Las solicitudes iniciadas antes de que la red esté inicializada se retrasan y se ponen en cola hasta que la red se inicializa. xCurl garantiza que sus solicitudes se realicen en la primera oportunidad posible sin ninguna gestión adicional por parte de su título.

## Suspensión/reanudación del título

`xCurl` gestiona la suspensión y la reanudación automáticamente. Al suspender, todas las solicitudes pendientes se cancelan inmediatamente y producen un error con `CURLE_NO_CONNECTION_AVAILABLE`. Además, consultar `curl_easy_getinfo` para `CURLINFO_OS_ERRNO` en estas solicitudes devuelve `HRESULT_FROM_WIN32(PROCESS_SUSPEND_RESUME)` al igual que cualquier otra API de GRTS, por si desea gestionar estos errores de forma diferente a los errores generales de desconexión de red.

Todos los identificadores de `xCurl` siguen siendo válidos durante todo el ciclo de vida del título, incluso a través de los límites de suspensión/reanudación. No es necesario limpiar ni inicializar ningún identificador de `xCurl` al suspender/reanudar. Las nuevas solicitudes iniciadas después de la suspensión se retrasan hasta la reanudación y la posterior inicialización de la red. Este retraso garantiza que se inicien lo antes posible sin requerir ninguna gestión adicional por parte de su título.

<Note>Cuando su título use la interfaz multi de `xCurl`, su título debe seguir llamando a `curl_multi_perform` junto con, opcionalmente, `curl_multi_poll` o `curl_multi_wait` durante la suspensión mientras haya solicitudes pendientes. `xCurl` bloquea la suspensión hasta que se completen todas las solicitudes en curso, y no llamar a `curl_multi_perform` podría hacer que su título agotara el tiempo de espera durante la suspensión. Recomendamos seguir llamando a curl\_multi\_perform durante todo el ciclo de vida, independientemente del estado de suspensión/reanudación. `xCurl` gestiona internamente todas las complejidades del estado suspendido.</Note>

## Funcionalidad de seguridad

Todas las solicitudes HTTPS a través de `xCurl` siguen los [procedimientos recomendados de seguridad en las comunicaciones (artículo con NDA)](/build/game-principles/security/communication-security-overview). `xCurl` aplica automáticamente cualquier anclaje de certificados especial especificado a través del "Single Sign-on Portal" de su título. No se admite el uso de `CURLOPT_SSL_VERIFYPEER` para deshabilitar la validación de certificados.

En los kits de desarrollo puede especificar el esquema HTTP sin cifrar, `http://`, para tráfico de depuración y con fines de prueba. Para todas las solicitudes RETAIL, debe especificar el esquema HTTPS, `https://`, para proporcionar el nivel de protección recomendado. Las solicitudes de xCurl que no especifican explícitamente un esquema infieren el esquema HTTPS.

<Note>`xCurl` no realiza la inserción automática de tokens. Para recuperar tokens de XBOX Live, su título debe llamar a las API de GRTS `XUserGetTokenAndSignatureAsync` o `XUserGetTokenAndSignatureUtf16Async` para recuperar los encabezados de autorización y firma y, a continuación, usar las opciones `CURLOPT_HEADER`, `CURLOPT_HTTPHEADER` o `CURLOPT_HEADERFUNCTION` en una llamada a `curl_easy_setopt` para establecer los encabezados antes de realizar la solicitud.</Note>

## Consideraciones sobre memoria y simultaneidad

`xCurl` comparte las mismas limitaciones de solicitudes simultáneas que se aplican a `WinHttp`. Los títulos deben limitar las solicitudes simultáneas a ocho o menos para garantizar que todas las llamadas funcionen correctamente. Este límite de simultaneidad se aplica a las solicitudes simultáneas que se emiten desde cualquiera de `xCurl`, `WinHttp` y las API de servicios de XBOX.

`xCurl` usa un búfer alternante (flip buffer) para recibir datos. Este patrón le permite proporcionar más rendimiento al llenar un segundo búfer mientras el título lee del primero. Sin embargo, si la devolución de llamada de lectura tarda demasiado o si no se llama a `curl_multi_perform` con la suficiente frecuencia en modo multi, la memoria del kernel de WinSock podría acumularse. Para obtener más información sobre la memoria del kernel de WinSock, consulte [consideraciones sobre la memoria de sockets](/build/console-features/networking/game-mesh/winsock-intro-networking#SocketMemory).

### Control de las asignaciones de xCurl

De forma predeterminada, `xCurl` usa el montón de Windows y sus asignaciones pueden rastrearse mediante `XMemSetWin32HeapTrackingHooks`. Como alternativa, se pueden proporcionar funciones de memoria en el momento de la inicialización, como en `libCurl`.

Además de [curl\_global\_init\_mem](https://curl.haxx.se/libcurl/c/curl_global_init_mem.html), `xCurl` proporciona la función opcional [xCurl\_global\_init\_mem](/reference/networking/xcurl/functions/xcurl_global_init_mem). Las devoluciones de llamada que se proporcionan a esta versión de `init` son similares a otras devoluciones de llamada de memoria del Microsoft Game Development Kit (GDK) y proporcionan más información que las devoluciones de llamada estándar de `libCurl` sobre los datos que se están asignando.

## Opciones admitidas

Las siguientes opciones se admiten con identificadores `easy` en `xCurl`.

* CURLOPT\_VERBOSE
* CURLOPT\_HEADER
* CURLOPT\_NOBODY
* CURLOPT\_FAILONERROR
* CURLOPT\_UPLOAD
* CURLOPT\_PUT
* CURLOPT\_ACCEPT\_ENCODING
* CURLOPT\_TRANSFER\_ENCODING
* CURLOPT\_FOLLOWLOCATION
* CURLOPT\_MAXREDIRS
* CURLOPT\_POST
* CURLOPT\_COPYPOSTFIELDS
* CURLOPT\_POSTFIELDS
* CURLOPT\_POSTFIELDSIZE
* CURLOPT\_POSTFIELDSIZE\_LARGE
* CURLOPT\_POSTREDIR
* CURLOPT\_REFERER
* CURLOPT\_USERAGENT
* CURLOPT\_HTTPHEADER
* CURLOPT\_HTTPGET
* CURLOPT\_HTTP\_VERSION
* CURLOPT\_CUSTOMREQUEST
* CURLOPT\_HEADERDATA
* CURLOPT\_ERRORBUFFER
* CURLOPT\_WRITEDATA
* CURLOPT\_READDATA
* CURLOPT\_INFILESIZE
* CURLOPT\_INFILESIZE\_LARGE
* CURLOPT\_CURLU
* CURLOPT\_URL
* CURLOPT\_PORT
* CURLOPT\_TIMEOUT
* CURLOPT\_TIMEOUT\_MS
* CURLOPT\_CONNECTTIMEOUT
* CURLOPT\_CONNECTTIMEOUT\_MS
* CURLOPT\_DEBUGFUNCTION
* CURLOPT\_DEBUGDATA
* CURLOPT\_HEADERFUNCTION
* CURLOPT\_WRITEFUNCTION
* CURLOPT\_READFUNCTION
* CURLOPT\_SSL\_VERIFYPEER
* CURLOPT\_SSL\_VERIFYHOST
* CURLOPT\_SSLCERT
* CURLOPT\_BUFFERSIZE
* CURLOPT\_UPLOAD\_BUFFERSIZE
* CURLOPT\_PRIVATE
* CURLOPT\_IGNORE\_CONTENT\_LENGTH
* CURLOPT\_HTTP\_TRANSFER\_DECODING
* CURLOPT\_HTTP\_CONTENT\_DECODING

## Funcionalidad no admitida

### Sockets y fd\_set

`xCurl` no expone el socket subyacente que se usa para el transporte. Por lo tanto, `xCurl` no implementa ninguna opción ni API que se usaría para operaciones de socket. Este límite también elimina la posibilidad de usar `fd_sets` para esperar la llegada de datos mediante `select` y `poll`. Para esperar la llegada de trabajo, use `curl_multi_wait` y `curl_multi_poll`.

Las siguientes API no están presentes en `xCurl`

* `curl_easy_send`
* `curl_easy_recv`
* `curl_multi_socket`
* `curl_multi_socket_action`
* `curl_multi_socket_all`
* `curl_multi_assign`
* `curl_multi_fdset`

Las siguientes opciones no tienen efecto y devuelven el error `CURLE_NOT_BUILT_IN`.

* CURLOPT\_LOCALPORT
* CURLOPT\_CONNECT\_ONLY
* CURLOPT\_SOCKOPTFUNCTION
* CURLOPT\_SOCKOPTDATA
* CURLOPT\_OPENSOCKETFUNCTION
* CURLOPT\_OPENSOCKETDATA
* CURLOPT\_CLOSESOCKETFUNCTION
* CURLOPT\_CLOSESOCKETDATA
* CURLOPT\_XOAUTH2\_BEARER
* CURLOPT\_PROGRESSFUNCTION
* CURLOPT\_PROGRESSDATA
* CURLOPT\_XFERINFOFUNCTION
* CURLOPT\_XFERINFODATA
* CURLOPT\_NOPROGRESS
* CURLINFO\_LASTSOCKET
* CURLINFO\_ACTIVESOCKET
* CURLMOPT\_SOCKETFUNCTION
* CURLMOPT\_SOCKETDATA
* CURLMOPT\_PIPELINING
* CURLMOPT\_PUSHFUNCTION

### CURL Share

La interfaz `Share` de `CURL` no está implementada.

### Pausa y reanudación de transferencias

Esta característica no se admite actualmente. Devolver CURL\_WRITEFUNC\_PAUSE o CURL\_READFUNC\_PAUSE desde una devolución de llamada da lugar a una operación anulada que no puede reanudarse.

## Consulte también

[API de libCurl](https://curl.haxx.se/libcurl/c/)

[Configuración de servicios web en el Partner Center (artículo con NDA)](/services/xbox-services/fundamentals/s2s-auth-calls/custom-service-config/web-services/live-web-services)

[Fiddler en consolas XBOX One](/build/console-features/networking/tools/fiddler-setup-networking)

[Información general de procedimientos recomendados de seguridad en las comunicaciones (artículo con NDA)](/build/game-principles/security/communication-security-overview)


## Related topics

- [xcurl_global_resume](/es/reference/networking/xcurl/functions/xcurl_global_resume.md)
- [xcurl_global_suspend](/es/reference/networking/xcurl/functions/xcurl_global_suspend.md)
- [xcurl_global_init_mem](/es/reference/networking/xcurl/functions/xcurl_global_init_mem.md)
- [Información general de WinHTTP](/es/build/console-features/networking/web-requests/intro-winhttp.md)
- [Información general de Unity](/es/paths/unity/overview.md)
