Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Victor Ferreira

Enviar solicitação POST de uma aplicação PHP para outra

Recommended Posts

Amigos, a dúvida é a seguinte:

 

Gostaria de enviar e receber de PHP para PHP informações através de POST. O Cliente1 irá por exemplo se identificar para para Servidor e dizer que quer informação do Banco de Dados. Essa solicitação e troca de mensagens deve ser feita pelo método POST. O Servidor então deve responder ao Cliente1 que deve poder receber o conteúdo desta resposta e tratá-la devidamente.

 

Utilizei o seguinte código: http://www.jonasjohn.de/snippets/php/post-request.htm

 

E aparentemente minha solicitação POST está sendo recebida e respondida pelo Servidor. O problema é que o conteúdo que me interessa eu não SEI responder. Sei que está acontecendo uma correspondência entre Cliente e servidor por causa do cabeçalho. Mas não sei enviar outras coisas.

 

Reparem que no código deste link há o seguinte:

  echo $result['header']; 
   echo '<hr />';
   echo $result['content'];

 

A variável $result['header'] eu recebo. O que está abaixo de <hr/> não. Eu tentei responder um texto tipo 'Olá' por echo (echo 'Olá') mas não deu certo.

 

Alguém sabe como eu faço pra responder a essas solicitações POST?

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

POR FAVOR!

 

estou batendo cabeça com um amigo HÁ MUITO TEMPO tentando resolver isso. você tem algum exemplo? PHP1 ->solicita-> PHP2 ->responde-> PH1

 

valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, essas requisições, vai e vem, é contigo, então vamos lá.

<?php
    $cURL = curl_init();
    curl_setopt( $cURL, CURLOPT_URL, 'http://127.0.0.1/...' );
    curl_setopt( $cURL, CURLOPT_POST, true );
    curl_setopt( $cURL, CURLOPT_POSTFIELDS, Array( ... ) );
    curl_setopt( $cURL, CURLOPT_RETURNTRANSFER, true );
    echo curl_exec( $cURL ); 

o Array, é os dados que você quer mandar via post, você pode mandar vários tipos de requisições, como GET, PUT..

pra cada uma delas, exceto a GET, tem um parâmetro específico. você pode dar uma olhada na documentação !

 

Também, tinha uma classe, que eu usava pra fazer esse tipo de coisa, entretanto, faz já alguns meses, você pode usar

a classe para enviar arquivos, entre outras funcionalidades, veja um exemplo de uso, enviando requisições POST:

<?php
       ini_set( 'date.timezone', 'America/Sao_Paulo' );
       $HTTPRequest = new HTTPRequest();
       $HTTPRequest->getHTTPObject();
       $HTTPRequest->setRequestTarget( new HTTPRequestTarget( 'http://127.0.0.1/HTTPRequest/teste.php' ) );
       $HTTPRequest->setRequestMethod( 'POST' );
       $HTTPRequest->setRequestBody( 
               Array( 'Nome' => 'Teste',
                      'Sobrenome' => 'Teste...',
                      'Data' => strftime( '%H:%M:%S', time() )
        ) );
       $HTTPRequest->sendRequest();
       if( $HTTPRequest->getRequestStatus() == 200 ){
           echo $HTTPRequest->getRequestOutput();
       }elseif( $HTTPRequest->getRequestStatus() == 404 ){
           echo 'Servidor não encontrado, ou indisponível';
       }

 

Então, no arquivo teste.php, eu tinha o seguinte conteúdo:

<?php
    echo '<pre>';
    print_r( $_POST );
    print_r( $_GET );
    print_r( $_FILES );

 

Saída:

Array
(
   [Nome] => Teste
   [sobrenome] => Teste...
   [Data] => 16:52:57
)
Array
(
)
Array
(
)

 

Enviando arquivos.

<?php
       ini_set( 'date.timezone', 'America/Sao_Paulo' );
       $HTTPRequest = new HTTPRequest();
       $HTTPRequest->getHTTPObject();
       $HTTPRequest->setRequestTarget( new HTTPRequestTarget( 'http://127.0.0.1/HTTPRequest/teste.php' ) );
       $HTTPRequest->setRequestMethod( 'POST' );
       $HTTPRequest->setHTTPFileObject( new HTTPRequestFile( 'teste.php' ) );
       $HTTPRequest->sendRequest();
       if( $HTTPRequest->getRequestStatus() == 200 ){
           echo $HTTPRequest->getRequestOutput();
       }elseif( $HTTPRequest->getRequestStatus() == 404 ){
           echo 'Servidor não encontrado, ou indisponível';
       }

 

Saída:

Array
(
)
Array
(
)
Array
(
   [file] => Array
       (
           [name] => teste.php
           [type] => text/x-php
           [tmp_name] => C:\xampp\tmp\php5B.tmp
           [error] => 0
           [size] => 96
       )

)

Ou Então, você também pode enviar requisições HTTP PUT, veja um exemplo:

<?php
       ini_set( 'date.timezone', 'America/Sao_Paulo' );
       $HTTPRequest = new HTTPRequest();
       $HTTPRequest->getHTTPObject();
       $HTTPRequest->setRequestTarget( new HTTPRequestTarget( 'http://127.0.0.1/HTTPRequest/teste.php' ) );
       $HTTPRequest->setRequestMethod( 'PUT' );
       $HTTPRequest->setHTTPFileBody( new HTTPRequestFile( 'teste.php' ) );
       $HTTPRequest->sendRequest();
       if( $HTTPRequest->getRequestStatus() == 200 ){
           echo $HTTPRequest->getRequestOutput();
       }elseif( $HTTPRequest->getRequestStatus() == 404 ){
           echo 'Servidor não encontrado, ou indisponível';
       }

 

Teste.php:

<?php
    echo '<pre>';
    print_r( $_POST );
    print_r( $_GET );
    print_r( $_FILES );
    echo file_get_contents( 'php://input' );

 

Saída:

Array
(
)
Array
(
)
Array
(
)
';
    print_r( $_POST );
    print_r( $_GET );
    print_r( $_FILES );
    echo file_get_contents( 'php://input' );

Você pode baixar os arquivos aqui, :seta: HTTPRequest

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok, mas isto é o PHP1 enviando para o PHP2, correto?

 

Como eu extraio e envio a resposta? Extrair imagino que seja pelo array $_POST, mas e como eu envio uma resposta do PHP2 para o PHP1, tipo um outro array de resultados do banco de dados que eu serializei (exemplo, somente, nao to pensnado exatamente nisto).

 

abs e obrigado

 

@edit hahaha nem li o resto, só li o primeio trecho de código

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, vamos deixar mais claro aqui, veja, você está na sua maquina, e tem um script PHP no servidor externo, lá no teu www.seusite.com ...

Então, esse script é responsável por fazer alguma coisa quando recebe o POST, ou GET, ou seja lá o que for, então VOCÊ na sua maquina, vai enviar

uma requisição com os dados locais para lá, lá ele vai receber esses dados, e fazer alguma coisa, esse método que eu te mostrei, faz a mesma coisa

seria como você estivesse no navegador, entende ? você recebe _POST, _FILES, _GET, normalmente

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

estranho, fiz o seguinte:

$post_data = array(
   'test' => 'foobar',
   'okay' => 'yes',
   'number' => 2
); //exemplo que peguei no código do cara lá em cima

$cURL = curl_init();
curl_setopt( $cURL, CURLOPT_URL, 'http://minhamaquina.no-ip.org/meuarquivophp.php' );
curl_setopt( $cURL, CURLOPT_POST, true );
curl_setopt( $cURL, CURLOPT_POSTFIELDS, $post_data );
curl_setopt( $cURL, CURLOPT_RETURNTRANSFER, true );
echo curl_exec( $cURL );

 

no outro programa que recebe a solicitação, faço o seguinte:

if(isset($_POST['test'])){
       echo 'teste';
       $conexao = mysql_connect('servidorMYSQL', 'root', 'senhadoroot');
       $bancoDadosEscolhido = mysql_select_db('meubanco',$conexao);
       mysql_query("INSERT INTO ... código do insert");
   }

 

e ele não tá dando resultado no banco de dados. O que está errado?

Ah... e nem dá echo em nada ali no curl_exec.

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim, já fizemos vários testes manualmente (do tipo, colocar código fora daquele if, entrar manualmente e alterar o banco). a nossa página só tem esse codigo. nenhum include, nada mais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estranho, você tem a extensão da cURL habilitada no php.ini ? já verificou isso ?

Também, ative todas as mensagens de erro na página que você implementa o código da cURL

error_reporting( E_ALL );
ini_set( 'display_errors', 'On' );

:(

Compartilhar este post


Link para o post
Compartilhar em outros sites

fizemos um último teste aqui com formulário e botão de submit e percebemos que o servidor (que é remoto) não está, por algum motivo, recebendo solicitações POST. É um Mandriva, deve ser alguma configuração DEFAULT de segurança.

 

Obrigado pela ajuda, vou atualizar a Thread mais tarde. Vamos investigar o motivo do APACHE nao está recebendo isso.

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.