Enviar Dados via POST para URL Externa

42 views
Skip to first unread message

guuss

unread,
Apr 10, 2015, 9:44:12 AM4/10/15
to yii-framew...@googlegroups.com
Bom dia a todos!

Estou com uma dificuldade aqui, acho que não estou conseguindo pensar direito.
Preciso enviar dados que estão numa tabela do bd, para uma URL externa, via POST, mas preciso que isso seja feito ao acessar a action, sem o usuário clicar num botão de Submit. Não precisa nem abrir uma view.
Alguém pode me dar uma luz de como fazer isso?

Obs. O usuário deve ser redirecionado para essa URL externa.

Desde já grato.

Felipe Menegheli Moreira

unread,
Apr 10, 2015, 9:49:35 AM4/10/15
to yii-framew...@googlegroups.com
Bom dia Gus.

Tente explicar com mais detalhes o que você deseja fazer, para agente poder te ajudar.

Da forma como digitou, está meio confuso: "Preciso enviar dados que estão numa tabela do bd, para uma URL externa, via POST" ?????

--
YFB - Yii Framework Brasil
04/2011: Anexos de até 250kb foram autorizados pelos membros da lista. Use com moderação.
---
Você recebeu essa mensagem porque está inscrito no grupo "YFB - Yii Framework Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para yii-framework-br...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/yii-framework-brasil/a194d072-ca56-47b8-8c51-4f70b6be8b9a%40googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.



--

Felipe Menegheli Moreira
Programador

Gestão de Materiais e Processos

--------------------------------------

Telefone: +55 (27) 3343-2071

www.el.com.br



Ezaul Sena Moreira

unread,
Apr 10, 2015, 11:35:32 AM4/10/15
to yii-framew...@googlegroups.com
Prezado, a melhor pratica para isso (consultar um recurso externo) é usando webservices.

O Yii tem suporte a este tipo de tecnologia.

Abs




Para mais opções, acesse https://groups.google.com/d/optout.



--
Ezaul Moreira.
Analista/Desenvolvedor de Sistemas
  • Fone: (91) - 98225.1574.

Wilson Guimarães

unread,
Apr 10, 2015, 12:01:08 PM4/10/15
to yii-framew...@googlegroups.com
Essa URL externa é uma aplicação sua ou de terceiros?

Pq se for de terceiros, ao abrir a action, pode chamar uma função ajax como post passando os valores para ela.

Se a URL externa for uma aplicação sua, recomendo também usar Web Services RESTful(API)

Se for construir uma API com Advanced Template, você deverá criar uma nova pasta.
Ex:
Backend, Common, Frontend e Api

Gustavo S. Carneiro

unread,
Apr 10, 2015, 12:12:12 PM4/10/15
to yii-framew...@googlegroups.com
Boa tarde a todos!

O cenário é o seguinte:

A URL externa é de terceiros, que recebe os dados via POST.

Após preencher um formulário, o usuário vai receber um e-mail com um link. Esse link o levará para uma Action da minha aplicação.

O que eu preciso:
Verificar a key passada como parâmetro do link, e após isso, buscar dados de outro Model, passando a key como parâmetro, e redirecionar o usuário para a URL externa, enviando os dados via POST.

Eu consigo fazer, gerando um form, e o usuário clica no botao submit. Gostaria de eliminar esse passo de clicar no botão, e levar o usuário direto pra URL externa. Mas isso só é possível se os dados chegarem via POST nela.

Desde já grato pela atenção de todos.




Para mais opções, acesse https://groups.google.com/d/optout.



--
Gustavo S. Carneiro
Dois Comunicação
+55 34 8869-5735
+55 34 3842-4896

Plinio Pavin

unread,
Apr 10, 2015, 2:18:11 PM4/10/15
to yii-framew...@googlegroups.com
Segue um exemplo pra você "simular" um formulário via php.

Não sei se é uma das melhores práticas, mas pode te ajudar.

O array $postdata contém as variáveis que serão enviadas via post:

               $postdata = http_build_query(
                   array(
                       'var1' => 'abc',
                       'var2' => 'xyz',
                   )
               );
              
               $opts = array('http' =>
                   array(
                       'method'  => 'POST',
                       'header'  => 'Content-type: application/x-www-form-urlencoded; User-Agent: PHP App; Content-Language:pt-br; charset=utf-8; accept-charset:UTF-8',
                       'content' => $postdata
              
                   )
               );
              
               $context  = stream_context_create($opts);
               $retorno = file_get_contents('url_onde_fazer_o_post', false, $context);

Espero que seja útil

Plinio Pavin
Consultoria em Informática
http://www.pliniopavin.com.br


diego nunes

unread,
Apr 10, 2015, 2:33:15 PM4/10/15
to yii-framew...@googlegroups.com
    Se você souber usar o Composer, use um pacote chamado "Unirest" (http://unirest.io/php.html). Se não souber, procure sobre a lib "curl" (http://php.net/manual/en/book.curl.php), que serve para fazer chamadas a recursos via URLs.

  Abraços.


Para mais opções, acesse https://groups.google.com/d/optout.



--
diego nunes
dnunes.com

Wilson Guimarães

unread,
Apr 10, 2015, 3:04:38 PM4/10/15
to yii-framew...@googlegroups.com

Wilson Guimarães

unread,
Apr 10, 2015, 3:09:41 PM4/10/15
to yii-framew...@googlegroups.com
Você disse que com form já funciona?Correto?
Mantém o form que vc fez e usa o javascrtip para disparar o post assim que a página carregar usandi
O que acha?

window.onload = function() {
document.getElementById("myForm").submit();
}

diego nunes

unread,
Apr 10, 2015, 4:06:41 PM4/10/15
to yii-framew...@googlegroups.com
    Essa implementação tem uma série de fraquezas e é muito frágil. Pode falhar por diversos motivos (javascript desligado, erro de carregamento...) e pode deixar o sistema num estado inconsistente. Se você tem o interesse em evitar inconsistência e ter mais confiabilidade, a ação precisa ser atômica e executada de uma só vez (se envolver banco, abre uma transação, executa tudo, inclusive as chamadas externas, e depois dá o commit no banco).


Para mais opções, acesse https://groups.google.com/d/optout.



--
diego nunes
dnunes.com

Wilson Guimarães

unread,
Apr 10, 2015, 6:16:17 PM4/10/15
to yii-framew...@googlegroups.com
No caso de Guss, o javascript iria apenas dar submit na tela, e isso não é nada demais.
Concordo que se fosse algo mais complexo, poderia sim não usa-lo.
E caso o mesmo falhe ou esteja desligado por parte do navegador do usuário, o formulário estaria ali firme e forte com o botão de submit disponível.


diego nunes

unread,
Apr 10, 2015, 7:21:05 PM4/10/15
to yii-framew...@googlegroups.com
    Por isso eu disse: se a ação exigir consistência, não é uma boa ideia. Porque o usuário pode simplesmente fechar a tela e não clicar no formulário. Tudo depende de quão importante é a ação e o quanto de inconsistência a não-execução dela introduziria no sistema.


Para mais opções, acesse https://groups.google.com/d/optout.



--
diego nunes
dnunes.com

Wilson Guimarães

unread,
Apr 10, 2015, 7:24:47 PM4/10/15
to yii-framew...@googlegroups.com
Enfim, Guss...
Pelo que vi, você tem várias dicas e caminhos diferentes para resolver seu problema.
Veja qual melhor resolve seu problema.
Abraço a todos!

Gustavo S. Carneiro

unread,
Apr 10, 2015, 10:17:36 PM4/10/15
to yii-framew...@googlegroups.com
Obrigado a todos pelas dicas.
Estou fazendo alguns testes e em breve eu posto o resultado e a solução que escolhi.

Att.
Gustavo


Para mais opções, acesse https://groups.google.com/d/optout.

Cesar Albuquerque

unread,
Apr 12, 2015, 11:13:33 AM4/12/15
to yii-framew...@googlegroups.com
Usa o curl! Simples, direto e resolve o problema!


Att
César Albuquerque

Gustavo S. Carneiro

unread,
Apr 14, 2015, 11:59:57 AM4/14/15
to yii-framew...@googlegroups.com
Boa tarde, pessoal!

Resolvi meu problema usando CURL. Funcionou como eu precisava.
Obrigado a todos!


Para mais opções, acesse https://groups.google.com/d/optout.
Reply all
Reply to author
Forward
0 new messages