Ver Mensaje Individual
  #350  
Antiguo 11-11-2020
juramisa juramisa is offline
Miembro
 
Registrado: abr 2007
Posts: 54
Reputación: 18
juramisa Va por buen camino
Alternativa NetHttpClient

Buenos días

Os presento una alternativa a NetHttpClient, quien tiene los componentes de SecureBlackBox 2020 DE.

Código Delphi [-]
var
  CertificateStorage: TsbxCertificateStorage;
  cert : TsbxCertificate;
  otros_parametros : string;
  encontrado : Boolean;
  Cuerpo_Mensaje : TFileStream;

  Entry: TSBxArchivedFile;



procedure....
      // Fichero LROE  GZip
      Cuerpo_Mensaje := TFileStream.Create(FicheroComprimido, fmOpenRead);
      // Cargar mensaje json
      el_eus_bizkaia_n3_data := f_cabecera_LROE(el_concepto, el_subcapitulo, DMBatu.CDSPres.FieldByName('PR020').AsString, 
                          DMBatu.CDSPres.FieldByName('PR040').AsString, DMBatu.CDSPres.FieldByName('PR090').AsString, 
                          DMBatu.CDSPres.FieldByName('PR100').AsString, DMBatu.CDSPres.FieldByName('PR080').AsString, IntToStr(ejercicio_presentacion.Value));
      // Selección del cerificado
      sbxHTTPClient1.TLSSettings.AutoValidateCertificates :=   True;
      CertificateStorage := TsbxCertificateStorage.Create(nil);
      if CertificateStorage.Opened then
         CertificateStorage.Close(True);
      CertificateStorage.Open('system://currentuser@localhost/?store=MY');
      encontrado := False;
      sbxHTTPClient1.ClientChain.Clear;
      for i := 0 to CertificateStorage.Certificates.Count - 1 do
      begin
        cert := CertificateStorage.Certificates[i];
        if bintostr(Cert.SerialNumber) = mi_certificadoID.Caption then
        begin
          sbxHTTPClient1.ClientChain.Add(cert);
          encontrado := True;
        end;
      end;
      if not encontrado then
      begin
        Application.MessageBox('Firma no encontrada',
          'Proceso de firma', MB_OK + MB_ICONWARNING
          + MB_DEFBUTTON2);
        Exit;
      end;
      // Carga parámetros cabecera   
      sbxHTTPClient1.RequestParameters.ContentType       := el_Content_Type;
      otros_parametros := 'Accept-Encoding: '             + el_accept_Encoding              + #13#10
                        + 'Content-Encoding: '            + el_Content_Encoding             + #13#10
                        + 'eus-bizkaia-n3-version: '      + el_eus_bizkaia_n3_version       + #13#10
                        + 'eus-bizkaia-n3-content-type: ' + el_eus_bizkaia_n3_content_type  + #13#10
                        + 'eus-bizkaia-n3-data: '         + el_eus_bizkaia_n3_data                  ;
      sbxHTTPClient1.RequestParameters.CustomHeaders := otros_parametros;
      // HTTP
      case rg_Entorno.ItemIndex of
        0: sbxHTTPClient1.PostStream(la_url_pruebas, Cuerpo_Mensaje);
        1: sbxHTTPClient1.PostStream(la_url, Cuerpo_Mensaje);
      end;
      // sbxHTTPClient1.OutputBytes nos devuelve el cuerpo respuesta
      // Guardo el fichero GZIP
      FicheroRespuesta := DMBatu.CDSEnvc.FieldByName('EN070').AsString +'.gz';
      GuardarRespuesta(FicheroRespuesta,sbxHTTPClient1.OutputBytes);
      // Descomprimo el fichero GZIP
      if sbxArchiveReader1.Opened then
         sbxArchiveReader1.Close;

      sbxArchiveReader1.Open(Integer(aftGzip), FicheroRespuesta);

      for i := 0 to sbxArchiveReader1.Files.Count - 1 do
      begin
        Entry := sbxArchiveReader1.Files[i];
        sbxArchiveReader1.Extract(Entry.Path, ExtractFilePath(DMBatu.CDSEnvc.FieldByName('EN070').AsString), false);
        Application.ProcessMessages;
        RenameFile(ExtractFilePath(DMBatu.CDSEnvc.FieldByName('EN070').AsString) + Entry.Path, DMBatu.CDSEnvc.FieldByName('EN070').AsString);
        Application.ProcessMessages;
      end;
      // Tratamiento de la respuesta
      XMLDocument1 := TXMLDocument.Create(nil);

      XMLDocument1.Active := False;
      XMLDocument1.XML.Clear;
      XMLDocument1.LoadFromFile(DMBatu.CDSEnvc.FieldByName('EN070').AsString);

      XMLDocument1.Active := True;
.......

      procedure GuardarRespuesta(const Fichero: String; Respuesta: TBytes);
      var
        stream: TBytesStream;
      begin
        stream := TBytesStream.Create(Respuesta);
        try
          stream.SaveToFile(Fichero);
        finally
          stream.Free;
        end;
      end;

Última edición por Casimiro Notevi fecha: 11-11-2020 a las 17:12:08.
Responder Con Cita