Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
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
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
)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
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
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
;)
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.
Veja se você consegue entrar no endereço que está mandando a requisição
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.
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' );
:(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
Olá, faz com cURL.. é bem mais fácil. Se você quiser um exemplo, fale !