Ir para conteúdo
  • Cadastre-se

dev botao

Redirect no Synapse + Cloudflare


Ver Solução Respondido por TiagoTecchio,
  • Este tópico foi criado há 360 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro
Postado (editado)

Boa tarde colegas.

Estou tentando realizar algumas requisições (GET a princípio) em uma API que está atrás de um Cloudflare.

Tenho utilizado o Synapse para todas as requisições que preciso (pix e APIs em geral) e funciona bem.

Contudo a API retorna um código 301-Moved Permanently. Não identifiquei uma maneira de redirecionar usando synapse.

Fiz umas pesquisas e tentei utilizar o componente Indy TIdHttp. O código de retorno até muda de 301 para 403-Forbidden, mas creio que o Cloudflare esteja bloqueando a requisição.

Obs: testando pelo Postman funciona 🙄.

Caso alguém tenha passado por situação semelhante, agradeço qualquer comentário.

 

Editado por TiagoTecchio
sintaxe
  • Consultores
Postado

Tópico movido para a área aberta do fórum para que possa alcançar mais membros.

Alguns links que talvez possam ser úteis:

  • Curtir 1
Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Membros Pro
  • Solution
Postado (editado)

Bom dia Diego,

Grato pelo retorno e os links.

Já havia pesquisado todos os links que o Google/Bing/Duck sugeriram 😵.

Uma das sugestões que encontrei foi atualizar o Indy, porém o meu Delphi é mais antigo (XE6) e fiquei com receio de criar mais problemas ao atualizar a biblioteca.

A solução encontrada foi utilizar a suíte de componentes Overbyte ICS - já utilizava ela para situações específicas. É uma biblioteca opensource,  bastante ampla e mais complexa que o Synapse, mas a recomendo fortemente.

Atualizei para a última versão devido ao SSL, fiz os testes e deu certo.

Utilizei as classes TSslHttpCli e TSslContext tanto para GET quanto POST.

Editado por TiagoTecchio
edicao
  • Curtir 1
  • Obrigado 1
Postado

usando synapse:

Var
  http: THTTPSend;
  sURLRedirect: string;
Begin
  http := THTTPSend.Create;
  Try
    sURLRedirect := '';
    HTTP.HTTPMethod('POST', 'SUAURL');
    If (http.ResultCode = 301) or (http.ResultCode = 302) Then
    Begin
      HeadersToList(http.Headers);
      sURLRedirect := http.Headers.Values['Location'];
      sURLRedirect := Trim(sURLRedirect);
    End;

    If sURLRedirect <> '' Then
      HTTP.HTTPMethod('POST', sURLRedirect);
  Finally
    Begin
      http.Free;
    End;
  End;
End;

 

  • Curtir 2
  • Membros Pro
Postado

Bom dia,

Grato pela dica.

Fiz alguns testes usando o seu exemplo e consegui tratar/contornar o redirect do Cloudflare.

Precisei ajustar esta parte:

If sURLRedirect <> '' Then
      HTTP.HTTPMethod('POST', sURLRedirect);

Para esta (recriando o objeto e adicionando os headers/body novamente):

urlRedirect := Trim(objHttp.Headers.Values['Location']);
if urlRedirect <> EMPTY_STR then
begin
   objHttp.Free;
   objHttp := THTTPSend.Create;
   FH.StrParaStream(synHttp.Document, vs);
   objHttp.MimeType := 'application/json';
   for tmp in LHeaders do
	   objHttp.Headers.Add(tmp);
   Result := objHttp.HTTPMethod(pMetodo, urlRedirect);
end;

 

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

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • 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.