Envio de dados com PHP utilizando método POST sem usar formulário HTML

Mais um probleminha que pode atrapalhar a vida de um programador PHP. Ao precisar enviar dados para uma página de um servidor remoto, normalmente para integrar seu sistema a algum outro sistema remoto geralmente feito em uma linguagem inferior (aka. ASP) e usando o método POST dentro do seu programa, sem poder utilizar um formulário e mandar o usuário clicar, usando apenas uma URL.

Bem, a tarefa seria simples se pudéssemos utilizar o método GET. Usando o método GET, poderíamos simplesmente acessar a url remota usando header() e depois redirecionar novamente para o nosso sitema a partir do arquivo remoto. No meu caso eu tinha que mandar 3 variáveis (assunto,e-mail e texto) para um arquivo .asp em outro servidor – e claro, o programador deste quis tirar onda comigo mandando eu enviar com método POST. Enfim, é claro que eu resolvi o problema e deixei ele chupando o Bill Gates.

Após horas de pesquisas e após ler muito no manual do PHP, descobri que poderia usar a extensão curl para tal, porém isso é complicado, pois nem sempre ela estará disponível no servidor do cliente. A solução que encontrei foi criando um contexto de stream, enviando-o em seguida ao servidor remoto usando fopen() e em seguinda, checando a resposta com stream_get_contents() pra saber se o conteúdo foi enviado corretamente ao servidor. Abaixo, a função concebida:

function POST($url, $dados, $headers = false)
{
     /*parâmetros necessários para criar um
        contexto de stream */
     $params = array('http' => array(
                     'method' => 'POST',
                     'content' => $dados ));
     //caso você precise enviar algum cabeçalho a mais
     if ($headers)
        $params['http']['header'] = $headers;
     //cria o contexto de stream
     $ctx = stream_context_create($params);

     //abre o arquivo remoto
     $fp = @fopen($url, 'rb', false, $ctx);
     //checa se o arquivo foi aberto com sucesso
     if (!$fp)
        throw new Exception("Problema com $url: -  $php_errormsg");
     //obtém a resposta
     $resp = @stream_get_contents($fp);

     /*checa se os dados do arquivo remoto
       foram lidos corretamente*/
     if ($resp === false)
        throw new Exception("Problema ao ler dados de $url: -  $php_errormsg");

     return $resp;
}


Exemplo de uso da função:


$url='http://seusite.com.br/arquivo.php';
$variaveis='nome=Andresa&time=palmeiras&tarefa=salvar';

POST($url, $variaveis);
  1. Lilian disse:

    Oi André,

    Estou iniciando em PHP, e queria saber como poderia realizar o metodo post para que quando o usuário dê um submit ele entre em uma função específica?

    Se puder me responder por e-mail, seria interessante, obrigada pela atenção.
    Lilian

  2. Lilian disse:

    Só corrigindo, não é André e sim Andresa..

  3. Stelio disse:

    legal!! gostei dessa de “chupando” o bill … rsrssr .. ahhh e viva o Palmeiraaassssss!!!

  4. FisherPeggy20 disse:

    Some time before, I did need to buy a building for my business but I did not have enough money and couldn’t purchase anything. Thank God my comrade proposed to try to take the business loans at trustworthy creditors. Thence, I acted that and used to be happy with my bank loan.

  5. A AGN tecnologia presta serviços na área de TI, como : Sistemas Web, WebSites, Arte Digital. Atuamos na região metropolitana de Porto Alegre, Gravataí, Cachoeirinha.

Spam protection by WP Captcha-Free

line
footer
Powered by Wordpress | Adaptado por Andresa Martins