Tipos incompatibles: ‘System.TArray‘ y ‘TNameValuePair’ al utilizar el encabezado de autenticación básica.
He estado tratando de usar los componentes NetHTTPRequest
y NetHTTPClient
en Delphi para emitir una solicitud de autenticación básica, pero he tenido problemas con el método NetHTTPRequest.Get
…
Básicamente, el método requiere tres parámetros, a saber, URL(String)
, un flujo de memoria y el encabezado del tipo TNetHeader
.
No sé por qué, pero cuando intento pasar el encabezado recién creado, obtengo el error mencionado en el título, es decir:
Incompatible types: ‘System.TArray<system.net.urlclient.tnamevaluepair>’ y ‘TNameValuePair’
No sé si tengo que hacer una conversión, y si es así, ¿a qué lo tengo que convertir?
Por supuesto, si no paso el encabezado de autenticación básica, el servidor simplemente devuelve un 401 porque no ve ninguna credencial o encabezado para decodificar…
Aquí está el código:
procedure TForm1.Button1Click(Sender: TObject);
var
HTTPResponseString: String;
begin
if IsLoggedIn = False then
begin
if Edit2.Text = '' then
begin
ShowMessage('La contraseña no puede estar vacía');
exit;
end;
BasicAuth := username + ':' + Edit2.Text;
AuthentificationPacket := EncodeBase64(UTF8Bytes(utf8string(BasicAuth)));
HTTPHeader := TNetHeader.Create('Authorization: Basic', AuthentificationPacket);
try
HTTPResponseLogin := NetHTTPRequest1.Get(HTTPLoginRequest, nil, HTTPHeader);
ShowMessage(HTTPResponselogin.ContentAsString());
IsLoggedIn := True;
except
on E: Exception do
ShowMessage(E.Message);
end;
Button1.Text := 'CERRAR SESIÓN';
end
else if IsLoggedIn then
begin
Edit1.Text := '';
Edit2.Text := '';
username := '';
password := '';
tagid := '';
Button1.Enabled := False;
Button1.Text := 'INICIAR SESIÓN';
IsLoggedIn := False;
Timer1.Enabled := False;
IdleTimer := 0;
Application.OnIdle := nil;
end;
end;
La línea problemática es, por supuesto, la NetHTTPRequest1.Get(HTTPLoginRequest, nil, HTTPHeader);
Donde HTTPHeader
está marcado como incompatible…
¡Cualquier ayuda es apreciada!</system.net.urlclient.tnamevaluepair>
davy.ai
Parece que el problema está con el tipo de
HTTPHeader
. El métodoTNetHeader.Create
está devolviendo unTArray<tnamevaluepair>
y el métodoNetHTTPRequest.Get
requiere unTNetHeader
como tercer parámetro.Puedes intentar cambiar la declaración de
HTTPHeader
aTArray<tnamevaluepair>
y pasarlo directamente al métodoGet
de esta manera:Esto debería resolver el error de tipos incompatibles. Avísame si esto funciona para ti.