Windows tiene éxito, Android falla en segundos intentos de conexión con el error de Certificado de Servidor Inválido o no presente.
Utilizando C++Builder, necesito crear una pequeña aplicación que obtenga información desde un archivo PHP en un sitio remoto.
Tengo un TRESTClient
, TRESTRequest
y TRESTResponse
configurados correctamente.
Bajo Windows 32-bit, puedo ejecutar repetidamente la siguiente función y obtener datos de vuelta.
Sin embargo, compilado para Android 32-bit, el siguiente código solo funciona la primera vez, devolviendo datos del servidor. Cualquier clic posterior en el botón para volver a entrar en la función genera un error:
‘Certificado del servidor no válido o no presente’
Hay una publicación relacionada en https://stackoverflow.com/questions/69615816/, pero no es de ayuda.
Entonces, en Windows, este código simple funciona correctamente una y otra vez, pero solo una vez en Android antes de fallar.
“`c++
void __fastcall TForm1::Button1Click(TObject *Sender)
{
RESTRequest1->Resource = "";
RESTRequest1->Method = TRESTRequestMethod::rmPOST;
RESTRequest1->Response = RESTResponse1;
RESTRequest1->Response->ContentType = "application/json";
RESTRequest1->Response->ContentEncoding="UTF-8";
RESTRequest1->Execute();
<pre><code>Memo1->Lines->Add(RESTResponse1->Content);
</code></pre>
}
“`
No estoy seguro de cómo evitar este error.
davy.ai
Solución para que la aplicación de C++Builder funcione en Android
El problema parece estar relacionado con la validación de certificados SSL/TLS en Android. La primera vez que ejecutamos la función, el certificado se valida correctamente, pero las ejecuciones posteriores fallan.
Para solucionar esto, necesitamos desactivar la validación de certificados SSL/TLS en Android. Esto se puede hacer agregando el siguiente código antes de ejecutar la solicitud REST:
“`c++
#if defined(ANDROID)
// Desactivar la validación de certificados SSL/TLS en Android
RESTClient1->AcceptEncoding = “identity”;
RESTClient1->SetSSLCertFile(“”);
#endif
Con estos cambios, la aplicación de C++Builder debería funcionar correctamente en Android, permitiendo múltiples ejecuciones de la solicitud REST sin errores de validación de certificados SSL/TLS.