JRRC 0 Denunciar post Postado Outubro 16, 2010 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
André D. Molin 15 Denunciar post Postado Outubro 16, 2010 http://www.php.net/manual/en/function.curl-error.php Compartilhar este post Link para o post Compartilhar em outros sites
JRRC 0 Denunciar post Postado Outubro 16, 2010 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
João Batista Neto 448 Denunciar post Postado Outubro 16, 2010 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
JRRC 0 Denunciar post Postado Outubro 16, 2010 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
João Batista Neto 448 Denunciar post Postado Outubro 16, 2010 $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
JRRC 0 Denunciar post Postado Outubro 16, 2010 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
João Batista Neto 448 Denunciar post Postado Outubro 16, 2010 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
JRRC 0 Denunciar post Postado Outubro 16, 2010 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
João Batista Neto 448 Denunciar post Postado Outubro 17, 2010 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
JRRC 0 Denunciar post Postado Outubro 17, 2010 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
João Batista Neto 448 Denunciar post Postado Outubro 17, 2010 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
JRRC 0 Denunciar post Postado Outubro 18, 2010 Olá João Batista Neto agora só cai no ELSE. =\ Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Outubro 19, 2010 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