Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá!!
Galera tô começando a estudar o webservice Nusoap e estou com um problema na requisição.
O seguinte, no computador do meu trabalho o webservice funcionada e dá o retorno, já no meu notebook ele dá o seguinte erro
"HTTP Error: Unsupported HTTP response status 404 Not Found (soapclient->response has contents of the response)"
As versões do php e apache são as mesmas.
Segue código:
<?php
//Cliente.php
include('lib/nusoap.php');
$cliente = new nusoap_client('http://localhost/webservice/server.php?wsdl');
$parametros = array('nome'=>'Teste',
'idade'=>51);
$resultado = $cliente->call('exemplo', $parametros);
if ($cliente->fault){
echo "Falha<pre>".print var_dump($resultado)."</pre>";
} else {
$err = $cliente->getError();
if ($err){
echo "Erro<pre>".$err."</pre>";
} else {
echo utf8_encode($resultado);
}
}
echo utf8_encode($resultado);
?>
<?phpinclude('lib/nusoap.php');
$servidor = new nusoap_server();
$servidor->configureWSDL('urn:Servidor');
$servidor->wsdl->schemaTargetNamespace = 'urn:Servidor';
function exemplo($nome, $idade){
return($nome.' -> '.$idade);
}
$servidor->register(
'exemplo',
array('nome'=>'xsd:string',
'idade'=>'xsd:int'),
array('retorno'=>'xsd:string'),
'urn:Servidor.exemplo',
'urn:Servidor.exmeplo',
'rpc',
'encoded',
'Apenas um exemplo utilizando o NuSOAP PHP.'
);
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$servidor->service($HTTP_RAW_POST_DATA);
?>
o mesmo código e o mesmo arquivo nusoap são os mesmos.
Alguém sabe dizer pq no not não funciona?
Bom, postei este erro com NUSOAP, mas o SOAP também dá erro,
Fatal error: Uncaught SoapFault exception: [HTTP] Could not connect to host in C:\wamp\www\sangewebservice\cliente.php:16 Stack trace: #0 [internal function]: SoapClient->__doRequest('<?xml version="...', 'http://sange:90...' 'urn://sange:909...', 1, 0) #1 C:\wamp\www\sangewebservice\cliente.php(16): SoapClient->__soapCall('getStudentName', Array) #2 C:\wamp\www\sangewebservice\service.php(6): client->getName(Array) #3 {main} thrown in C:\wamp\www\sangewebservice\cliente.php on line 16
Se comecei errado em um, no outro dá problema do mesmo jeito.
Testei no meu computador do trabalho e funciona, mas no meu notebook não, e já até reinstalei o wamp.
Sem sucesso.
Se alguém poder me ajudar, pois precisava que este webservice funcionasse no meu notebook para poder desenvolver um projeto pessoal.
Segue código com SOAP.
server,php
<?php
// Cria a classe
class server
{
public function __construct()
{
}
public function getStudentName($id_array)
{
return 'Sam';
}
} // final da classe
$params = array('uri' => "http://sange:9090/sangewebservice/server.php");
$server = new SoapServer(null, $params);
$server->setClass('server');
$server->handle();
?>
cliente.php
<?php
class client
{
public function __construct()
{
$params = array('location' => 'http://sange:9090/sangewebservice/server.php',
'uri' => 'urn://sange:9090/sangewebservice/server.php',
'trace' => 1);
$this->instance = new SoapClient(NULL,$params );
}
public function getName($id_array)
{
return $this->instance->__soapCall('getStudentName', $id_array);
}
}
$client = new client;
?>
service.php
<?php
include './cliente.php';
$id_array = array('id' => '1');
echo $client->getName($id_array);
?>
Galera ajudae!!
Se em um computador funciona e no outro não, é conectividade. Vide ao seu erro:
>
[HTTP] Could not connect to host in
Você consegue visualizar o WSDL acessando direto de um navegador (provavelmente não conseguirá no seu pc).
Outro ponto, se o endereço fornecido exibe um WSDL, use-o como primeiro parâmetro:
$client = new SoapClient('http://sange:9090/sangewebservice/server.php');
A URI não é necessário configurar (caso use como primeiro parâmetro). Trace é bom para visualizar os documentos de request e response.
Não resolveu, já tô no desespero!!
Vou ter que chegar no extremo de formatar o meu notebook para ver se resolve isso.
Tô aqui no pc do trabalho e tanto no servidor local quanto no da empresa o script funciona.
E na bost* do meu notebook não, já estou há 3 dias tentando resolver isso e nada só tempo perdido...
Mais alguma dica antes que eu parta para o exorcismo do meu notebook??? :(
O arquivo do apache - apache access log dá esse erro:
127.0.0.1 - - [18/Oct/2016:00:29:42 -0200] "GET /rest/database.php?admin HTTP/1.1" 404 10896
::1 - - [18/Oct/2016:00:29:42 -0200] "POST /REST/ HTTP/1.1" 200 279
::1 - - [18/Oct/2016:00:29:47 -0200] "GET /REST/INDEX.PHP HTTP/1.1" 200 248
127.0.0.1 - - [18/Oct/2016:00:29:49 -0200] "GET /rest/database.php? HTTP/1.1" 404 10896
::1 - - [18/Oct/2016:00:29:49 -0200] "POST /REST/INDEX.PHP HTTP/1.1" 200 279
127.0.0.1 - - [18/Oct/2016:00:29:50 -0200] "GET /rest/database.php? HTTP/1.1" 404 10896
::1 - - [18/Oct/2016:00:29:50 -0200] "POST /REST/INDEX.PHP HTTP/1.1" 200 279
127.0.0.1 - - [18/Oct/2016:00:29:52 -0200] "GET /rest/database.php?admin HTTP/1.1" 404 10896
::1 - - [18/Oct/2016:00:29:52 -0200] "POST /REST/INDEX.PHP HTTP/1.1" 200 279
::1 - - [18/Oct/2016:00:30:08 -0200] "GET /REST/INDEX.PHP HTTP/1.1" 200 248
127.0.0.1 - - [18/Oct/2016:00:30:10 -0200] "GET /rest/database.php? HTTP/1.1" 404 10896
::1 - - [18/Oct/2016:00:30:10 -0200] "POST /REST/INDEX.PHP HTTP/1.1" 200 279
127.0.0.1 - - [18/Oct/2016:00:30:11 -0200] "GET /rest/database.php?admin HTTP/1.1" 404 10896
::1 - - [18/Oct/2016:00:30:11 -0200] "POST /REST/INDEX.PHP HTTP/1.1" 200 279
Alguém tem uma dica??
o erro é bem específico:
404
Ou seja, não encontrado.
Detalhe, para o linux, "REST" é diferente de "rest". Como pode ver nas suas URL's:
Status 200, encontrado:
"POST /REST/INDEX.PHP HTTP/1.1" 200
Status 404, não encontrado:
"GET /rest/database.php?admin HTTP/1.1"
Até o momento, o seu problema é não existir as URLs que está tentando acessar. Que foi o que eu sinalizei no post #4.
Bom, este trecho do apache access log que informei acima foi do meu pc de casa, uma outra tentativa falha, neste realmente havia digitado com caixa alta, porém fui rever o do notebook e estava tudo minúsculo, assim não teria esta diferença, ainda porque o sistema que roda tudo certo e que testei os arquivos é o do trabalho que está em linux.
O que está dando tudo errado é o meu pessoal que roda em windows.
De qualquer forma acabei de resolver, devia ser algum conflito, até erro mesmo que devo ter provocado, que lascou com meu fim de semana.
É o seguinte:
Tanto no meu pc, quanto no meu note, eu tenho hosts de outros projetos e tal, até ai tudo bem!!
No caso deste problema que eu estava tendo, toda a url a qual dava problema estava com http://localhost/webservice/server.php no apontamento interno no arquivo.
E após criar um vhost que apontou direto para a pasta do projeto,"C:\wamp\www\webservice\cliente.php, e arrumar o link nos arquivos para http://webservice/server.php, o problema foi resolvido.
Vou estudar mais sobre virtual host, porque acho que o que fiz sendo o básico deve ter ficado falho de algum forma, senão a url com localhost/projeto/server.php deveria ter funcionado e não ter dado o erro 404 como o arquivo do apache access log apontou.
Espero ajudar alguém com problemas futuros neste ponto, se é que esse caso não tenha sido tão específico assim. :)
Grabriel Heming, agradeço sua a atenção!!
Se está estudando, já começou errado...
Nusoap é uma biblioteca desenvolvida para o PHP 4. Para o 5 em diante, utilize SOAP do PHP.