Ir para conteúdo

POWERED BY:

Arquivado

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

JRRC

Mostrar mensagem de erro cURL

Recommended Posts

Olá pessoal, eu gostaria de saber como que faço para mostrar uma mensagem de erro personalizada quando eu não conseguir me conectar via cURL.

 

Meu script está da seguinte forma abaixo, e quando não consigo me conectar é retornado uma mensagem de erro gerada pelo DOM então eu gostaria de colocar uma mensagem personalizada por mim.

 

$dom = new DOMDocument;
@$dom->loadHTML( $out );

$xpath 	   = new DOMXPath( $dom );
$resultado =  $xpath->query( "//div[@id='downloadlink']//a" )->item(0)->getAttribute( 'href' );

echo "<b><a href='".$resultado."' target=\"_blank\">".$resultado."</a></b><br>";

Desde de já obrigado pela ajuda de todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá André D. Molin

 

Tentei da seguinte forma abaixo mas continua aparecendo o erro gerado por cURL

 

if ($out)
{
	$dom = new DOMDocument;
	@$dom->loadHTML( $out );

	$xpath 	   = new DOMXPath( $dom );
	$resultado =  $xpath->query( "//div[@id='downloadlink']//a" )->item(0)->getAttribute( 'href' );
	
	echo "<b><a href='".$resultado."' target=\"_blank\">".$resultado."</a></b><br>";
}
else
{
	echo " <div id=\"box-erro-form\"><div>Erro no servidor, tente mais tarde.</div> </div>";
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentei da seguinte forma abaixo mas continua aparecendo o erro gerado por cURL

E onde está a cURL nesse código ????

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá João Batista Neto, abaixo segue o código onde implemento cURL

 

$ch = curl_init();
				
# Cookie Session #
curl_setopt($ch, CURLOPT_COOKIESESSION, 1 );

curl_setopt( $ch, CURLOPT_COOKIEJAR, "cookie.txt" );
curl_setopt( $ch, CURLOPT_POST, true );
curl_setopt( $ch, CURLOPT_POSTFIELDS, "login=1&redir=1&username=".$login."&password=".$passwd."" );
curl_setopt( $ch, CURLOPT_COOKIEFILE, "cookie.txt" );
curl_setopt( $ch, CURLOPT_URL, $link );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );

// Tempo limite de conexao
//curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);
//curl_setopt($ch, CURLOPT_TIMEOUT, 60);

curl_setopt( $ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT'] );

$out = curl_exec($ch);

E aqui está o que desejo fazer para aparecer a mensagem de ERRO personalizada por mim.

 

$dom  = new DOMDocument;
@$dom -> loadHTML ( file_get_contents( $out ) );

$xpath 	   		= new DOMXPath( $dom );
$verificaAcesso = $xpath->query( "//div[@id='downloadlink']//a" )->item(0);

if ( is_object ($verificaAcesso) )
{
	$resultado = $xpath->query( "//div[@id='downloadlink']//a" )->item(0)->getAttribute( 'href' );
	echo "<b><a href='".$resultado."' target=\"_blank\">".$resultado."</a></b><br>";
}
else
{
	echo " <div id=\"box-erro-form\"><div>Erro no servidor, tente mais tarde.</div> </div>";
}

curl_close($ch);

Dessa forma sempre cai no ELSE.

Compartilhar este post


Link para o post
Compartilhar em outros sites

$out = curl_exec($ch);
	
$dom = new DOMDocument;
@$dom -> loadHTML ( file_get_contents( $out ) );

Dessa forma sempre cai no ELSE.

 

Sim, vai cair mesmo no else:

 

1. Jamais utilize @ em desenvolvimento, você precisa das mensagens de erro para saber o que está acontecendo.

2. Jamais utilize @ em lugar nenhum, se seu código estiver correto, você não precisa delas. Elas só farão com que você perca em desempenho.

3. DOMDocument::loadHTML() espera uma string com o conteúdo HTML, file_get_contents() espera um nome de arquivo e curl_exec() lhe retornará ou uma string com o conteúdo ou false em caso de falhas.

 

Ou seja, se estiver utilizando cURL esse file_get_contents() ai não tem motivo nenhum para estar ai.

 

Faça a verificação do retorno do curl_exec(), se for diferente de false passe o conteúdo diretamente para DOMDocument::loadHTML(), se for false, mostre uma mensagem de erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá João Batista Neto

 

Deixei da seguinte forma abaixo e adivinha o que acontece quando o resultado é FALSE ?! Aparece uma mensagem de erro gerada pelo próprio cURL e não a que coloquei.

 

Fazendo uns testes aqui, sempre cai no ELSE independente que eu consiga me conectar ou não.

 

if ( $out == FALSE)
{
	echo "<div id=\"box-erro-form\"><div>Erro no servidor, tente mais tarde.</div> </div>";
}
else
{
	$dom = new DOMDocument;
	$dom->loadHTML( $out );

	$xpath 	   = new DOMXPath( $dom );
	$resultado =  $xpath->query( "//div[@id='downloadlink']//a" )->item(0)->getAttribute( 'href' );
	
	echo "<b><a href='".$resultado."' target=\"_blank\">".$resultado."</a></b><br>";
}

Que que está errado para isso está acontecendo ?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deixei da seguinte forma abaixo e adivinha o que acontece quando o resultado é FALSE ?! Aparece uma mensagem de erro gerada pelo próprio cURL e não a que coloquei.

 

Ok, agora para descobrir o problema, você coloca no bloco do FALSE o seguinte:

 

if ( $out == FALSE)
{
	echo "<div id=\"box-erro-form\"><div>Erro no servidor, tente mais tarde.</div> </div>";
	var_dump( curl_error( $out ) , curl_errno( $out ) );
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá João Batista Neto.

 

Continua na mesma, ele nao se conecta e mesmo assim não entra no FALSE, pula direto para o ELSE e dessa forma me emitindo a seguinte mensagem abaixo.

 

Fatal error: Call to a member function getAttribute() on a non-object

Muito estranho isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo, isso significa que seu problema não é com a cURL, o conteúdo está vindo corretamente.

 

Verifique seu XPath se o caminho para o nó está correto, essa consulta está retornando NULL.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa mensagem de erro aparece porque, como ele caiu no ELSE, então vai procurar pelo conteúdo do objeto query( "//div[@id=downloadlink]//a" ), mais só é possível encontrar esse conteúdo caso tenha se logado no site.

 

Então como não conseguiu se logar, ai é retornado a mensagem abaixo.

 

Fatal error: Call to a member function getAttribute() on a non-object

Aí o que eu gostaria, era quando ela não conseguisse se logar mostrasse uma mensagem de ERRO personalizada por mim mesmo.

 

Entendeu ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então basta que você faça a verificação antes, veja só:

 

$resultado = $xpath->query( "//div[@id='downloadlink']//a" )->item(0);

if ( !is_null( $resultado ) ){
$href = $resultado->getAttribute( 'href' );

echo "<b><a href='".$resultado."' target=\"_blank\">".$resultado."</a></b><br>";
} else {
echo 'Opz...';
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá João Batista Neto agora só cai no ELSE.

 

Alá amigo,

 

Dessa forma continuaremos andando em círculos e não chegaremos a lugar algum.

 

Leia atentamente esse artigo http://forum.imasters.com.br/public/style_emoticons/default/seta.gif http://nervinformatica.com.br/2010/09/13/os-7-passos-do-troubleshooting/

 

Quando você tiver condições de fornecer mais informações sobre o problema, tentaremos continuar te ajudando.

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.