Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
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>";
} echo " <div id=\"box-erro-form\"><div>Erro no servidor, tente mais tarde.</div> </div>";
}Tentei da seguinte forma abaixo mas continua aparecendo o erro gerado por cURL
E onde está a cURL nesse código ????
Olá João Batista Neto, abaixo segue o código onde implemento cURL
$ch = curl_init();
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>";
} echo " <div id=\"box-erro-form\"><div>Erro no servidor, tente mais tarde.</div> </div>";
}
curl_close($ch);
Dessa forma sempre cai no ELSE.
>
$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.
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>";
} $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 ?!
>
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 ) );
}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.
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.
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 ?
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>";echo 'Opz...';
}Olá João Batista Neto agora só cai no ELSE.
=\
>
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.
http://www.php.net/manual/en/function.curl-error.php