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);
32 Responses
Leave a Reply
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
Só corrigindo, não é André e sim Andresa..
legal!! gostei dessa de “chupando” o bill … rsrssr .. ahhh e viva o Palmeiraaassssss!!!
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.
muito bom
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.