Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 4702 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Bom dia Galera...

Andei pesquisando o assunto a respeito na net, mas não achei nada muito conclusivo...

Eu preciso utilizar o synapse no delphi 6 fora do uso dos componentes do ACBR.

A ideia é enviar um arquivo XML, login, senha e cidade para um webservice, o retorno seria tbem um arquivo XML.

Será que alguem poderia me auxiliar em como fazer essa conexão e receber esse retorno.

A principio acho que teria que usar um dos metodos de http post do synapse...mas tbem não sei quais as sequencias que preciso usa-lo.

Fico no aguardo.

Att.:

W7 Soluções
Ricardo Mendes
Analista/Programador
Skype: ricardo_w7
[email protected]

  • Moderadores
Postado

Bom dia Galera...

Andei pesquisando o assunto a respeito na net, mas não achei nada muito conclusivo...

Eu preciso utilizar o synapse no delphi 6 fora do uso dos componentes do ACBR.

A ideia é enviar um arquivo XML, login, senha e cidade para um webservice, o retorno seria tbem um arquivo XML.

Será que alguem poderia me auxiliar em como fazer essa conexão e receber esse retorno.

A principio acho que teria que usar um dos metodos de http post do synapse...mas tbem não sei quais as sequencias que preciso usa-lo.

Fico no aguardo.

A documentação do synapse é bem completa com exemplos e demonstrações de tudo que pode ser feito, já tentou dar um pulo na página deles: http://www.ararat.cz/synapse/doku.php/start e dar uma olhada?

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
Postado

Regys...

Esse foi o primeiro local que cheguei na pesquisa na net...

Mexendo nas coisas conforme os exemplos....mas não conseguir fazer funcioanr...

A principio estou mexendo nas funções HttpPostFile...mas ainda sem sucesso.

Vou continuar vendo o que consigo...obrigado

Att.:

W7 Soluções
Ricardo Mendes
Analista/Programador
Skype: ricardo_w7
[email protected]

Postado

Regys....

Depois de vascular a net....achei +/- algo que pode ajudar...vou deixar a sequencia que estou fazendo...talvez ajude mais alguem.

Primeiro adicionei um novo metodo na unit httpsend.pas do synapse. Achei isso no proprio site do synapse.

function HttpPostFileForm(const URL, FieldName, FileName: string;

  const Data: TStream; const FormFields:TStrings; const ResultData:

TStrings): Boolean;

var

  HTTP: THTTPSend;

  Bound, s: string;

  i:integer;

const

  FIELD_MASK = CRLF + '--%s' + CRLF +

              'Content-Disposition: form-data; name="%s"' + CRLF + CRLF+

              '%s';

begin

  Bound := IntToHex(Random(MaxInt), 8) + '_Synapse_boundary';

  HTTP := THTTPSend.Create;

  try

    s := '--' + Bound + CRLF;

    s := s + 'content-disposition: form-data; name="' + FieldName + '";';

    s := s + ' filename="' + FileName +'"' + CRLF;

    s := s + 'Content-Type: Application/octet-string' + CRLF + CRLF;

    HTTP.Document.Write(Pointer(s)^, Length(s));

    HTTP.Document.CopyFrom(Data, 0);

    // Include formfield

    for i:=0 to FormFields.Count-1 do

      begin

        S:= Format(FIELD_MASK,[Bound, FormFields.Names[I], FormFields.Values[FormFields.Names[I]]]);

        HTTP.Document.Write(Pointer(S)^, Length(S));

      end;

    s := CRLF + '--' + Bound + '--' + CRLF;

    HTTP.Document.Write(Pointer(s)^, Length(s));

    HTTP.MimeType := 'multipart/form-data; boundary=' + Bound;

    Result := HTTP.HTTPMethod('POST', URL);

    ResultData.LoadFromStream(HTTP.Document);

  finally

    HTTP.Free;

  end;

end;
Depois o meu metodo ficou assim.
function EnviarXMLWeb(pCaminhoArquivo: AnsiString; pLogin, pSenha, pCidade, pWebService: string): AnsiString;

var

  Retorno: AnsiString;

  ArquivoEnviar: TFileStream;

  ParametrosWeb: TStringList;

  RetornoXML: TStrings;

begin

  try


    //Cria o Arquivo que vai ser enviado via Stream

    ArquivoEnviar := TFileStream.Create(pCaminhoArquivo, fmOpenRead);


    //Lista de parametros para conectar no Webservice

    ParametrosWeb := TStringList.Create;

    ParametrosWeb.Add('login=' + EncodeURLElement(pLogin));

    ParametrosWeb.Add('senha=' + EncodeURLElement(pSenha));

    ParametrosWeb.Add('cidade=' + EncodeURLElement(pCidade));


    try

     //Cria um StringList para capturar o retorno...ja que o retorno é um novo XML

      RetornoXML := TStringList.Create;


    //HttpPostFileForm -> Retorna True se deu certo ou False se der erro.

    //pWebService  -> URL a ser utilizada para envio

    //'f1' -> Esse aqui é o parametro que o webservice exige para reconhecer a leitura do arquivo enviado.

    //ExtractFileName(pCaminhoArquivo) -> Extrai o nome do arquivo que estou enviando

    //ArquivoEnviar -> Arquivo que vai ser enviado, já em Stream

    //ParametrosWeb -> Parametros para conectar no webservice

    //RetornoXML -> StringList que vai receber o retorno vindo da WebService.


     if HttpPostFileForm(pWebService, 'f1', ExtractFileName(pCaminhoArquivo),

        ArquivoEnviar, ParamentrosWeb, RetornoXML) then

        Retorno := RetornoXML.Text

      else

      begin

        Retorno := 'Erro ao transmitir/recepcionar xml.';

        Abort;

      end;


    except

      Retorno := 'Erro ao transmitir/recepcionar xml.';

      Abort;

    end;


  finally

    FreeAndNil(ArquivoEnviar);

    FreeAndNil(ParamentrosWeb);

  end;


  Result := Retorno;

end;

Espero que entedam o que escrevi...

Obrigado Régys.

Att.:

W7 Soluções
Ricardo Mendes
Analista/Programador
Skype: ricardo_w7
[email protected]

  • Este tópico foi criado há 4702 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...