hinom 5 Denunciar post Postado Outubro 21, 2011 verifique se a pasta onde está salvando o arquivo de log está com permissão de escrita "chmod 0777" Compartilhar este post Link para o post Compartilhar em outros sites
Leuuuuu 0 Denunciar post Postado Outubro 22, 2011 Depois de apanhar um pouquinho <_< ... Consegui gerar o log de erros, o problema é que não adiantou muita coisa Este foi o erro gerado: [22-Oct-2011 10:36:10] PHP Fatal error: Erro: in /home/infoauto/public_html/sp/curlf.php on line 16 Na linha 16 temos: $data=curl_exec($ch) or die (curl_error($ch)); Resumindo, já sabia que o erro era na hora de executar o cURL e também já sei que não executa por que: couldn't connect to host O que eu preciso saber é PQ couldn't connect to host Lembrando que no servidor local funciona Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Outubro 22, 2011 tudo bem, não queria te entregar de bandeja, mas vi que está se esforçando.. pega aí um exemplo obs: faça o teste separado do seu sistema, salve como "curl_teste.php" ou qualquer outro nome e faça o teste com essa url com a qual você está tendo problema curl_simple_sample.php <?php date_default_timezone_set('Asia/Tokyo'); // troque para a sua time zone error_reporting( E_ALL ); ini_set( 'display_errors', 1 ); define( 'CHARSET', 'UTF-8' ); ini_set( 'default_charset', CHARSET ); ini_set( 'mbstring.http_output', CHARSET ); ini_set( 'mbstring.internal_encoding', CHARSET ); header( 'Content-Type: text/html; charset=' . CHARSET ); // aqui coloque os campos e seus repectivos valores $fields = array( 'campo_1' => 'valor_1' ,'campo_2' => 'valor_2' ,'campo_3' => 'valor_3' ); $opt = array( CURLOPT_PORT => 80 // a porta do protocolo.. padrão é 80 ,'METHOD' => 'GET' // o método (GET ou POST) ,CURLOPT_URL =>'http://localhost' // a url da pagina que receberá os dados ,'ENCODE_DATA' => 1 ,CURLOPT_TIMEOUT => 5 ,CURLOPT_HEADER => true // deixe true para exbir o cabeçalho de retorno. coloque "false" para omitir ,CURLOPT_MAXREDIRS => 1 ,CURLOPT_REFERER => 'http://' . $_SERVER['SERVER_NAME'] ,CURLOPT_USERAGENT => 'Mozilla/4.0 (compatible; MSIE 9.01; Windows NT 5.0)' ,CURLOPT_HTTPAUTH => false ,CURLOPT_USERPWD => false ,CURLOPT_CONNECTTIMEOUT => 5 ,CURLOPT_CONNECTTIMEOUT_MS => 5000 ,CURLOPT_RETURNTRANSFER => true ,CURLOPT_FOLLOWLOCATION => false ,CURLOPT_ENCODING => '' ,CURLOPT_AUTOREFERER => true ,CURLOPT_SSL_VERIFYHOST => 0 ,CURLOPT_SSL_VERIFYPEER => false ,CURLOPT_VERBOSE => 1 ,CURLOPT_CAINFO => false ); if( !$opt[CURLOPT_SSL_VERIFYPEER] ) { unset( $opt[CURLOPT_CAINFO] ); } if( !$opt[CURLOPT_USERPWD] ) { if( isset( $opt[CURLOPT_HTTPAUTH] ) ) { unset( $opt[CURLOPT_HTTPAUTH] ); } } $s = 0; switch( $opt['METHOD'] ) { default: case 'GET': $opt[CURLOPT_HTTPGET] = true; $opt[CURLOPT_URL] .= '?'; foreach( $fields as $k => $v ) { $p = $k . '=' . urlencode( $v ) . '&'; $s += strlen( $p ); $opt[CURLOPT_URL] .= $p; } $s = strlen( $p ); break; case 'POST': $opt[CURLOPT_POST] = 1; if( $opt['ENCODE_DATA'] == 2 ) { $opt[CURLOPT_POSTFIELDS] = $fields; }else{ $opt[CURLOPT_POSTFIELDS] = ''; foreach( $fields as $k => $v ) { $opt[CURLOPT_POSTFIELDS] .= $k . '=' . urlencode( $v ) . '&'; } $s = strlen( $opt[CURLOPT_POSTFIELDS] ); } break; } if( $s > 0 ) { $opt[CURLOPT_HTTPHEADER] = array( 'Content-Type: text/xml; charset=ISO-8859-1', 'Content-length: ' . $s ); } unset($opt['METHOD']); unset($opt['ENCODE_DATA']); $ch = curl_init(); curl_setopt_array( $ch, $opt ); /* foreach ($opt as $k => $v) { if (!curl_setopt($ch, $k, $v)) { //echo $k . ': ' . time(); exit; } } */ try { $content = curl_exec($ch); $err = curl_errno($ch); // número/código do erro do curl (não do protocolo) $errmsg = curl_error($ch) ; // mensagem de erro do curl (não do protocolo) $header = curl_getinfo($ch); curl_close($ch); //print_r($header); exit; //echo time(); exit; if ( $err == 0 ){ if ( $header['http_code'] == 200 ){ // retornou algo com sucesso //echo time(); exit; echo __FILE__ . ':' . __LINE__ . PHP_EOL; echo $content; exit; }else{ echo __FILE__ . ':' . __LINE__ . PHP_EOL; print_r($header); exit; } }else{ echo __FILE__ . ':' . __LINE__ . PHP_EOL; echo 'error n: ' . $err . PHP_EOL; echo 'error mesg: ' . $errmsg . PHP_EOL; print_r($header); exit; } } catch (HttpException $ex) { echo __FILE__ . ':' . __LINE__ . PHP_EOL; echo $ex; exit; } ?> Compartilhar este post Link para o post Compartilhar em outros sites
Leuuuuu 0 Denunciar post Postado Outubro 22, 2011 hinom muito obrigado pelo código Fiz as alterações necessárias para ele funcionar (para testes apenas é claro). Como esperado, localmente funcionou tudo certinho e obtive a imagem que eu queria, ao hospedalo no servidor agora sim temos um log de erro que se preze: /home/infoauto/public_html/sp/curl_sp.php:105 error n: 7 error mesg: couldn't connect to host Array ( => ://www3.fazenda.sp.gov.br/ipvanet/imagemDinamica.dContent? [content_type] => [http_code] => 0 [header_size] => 0 [request_size] => 0 [filetime] => -1 [ssl_verify_result] => 0 [redirect_count] => 0 [total_time] => 5.000021 [namelookup_time] => 0.008186 [connect_time] => 0 [pretransfer_time] => 0 [size_upload] => 0 [size_download] => 0 [speed_download] => 0 [speed_upload] => 0 [download_content_length] => -1 [upload_content_length] => -1 [starttransfer_time] => 0 [redirect_time] => 0 ) Sera que agora com este erro temos o real motivo? Pois confesso que com exceção do 'couldn't connect to host' não entendi todo o resto. Obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Outubro 23, 2011 possivelmente algum problema na resolução dns desse host. tente trocar o nome dns pelo IP "201.55.62.43" está assim: http://www3.fazenda.sp.gov.br/ipvanet/imagemDinamica.dContent coloque assim: http://201.55.62.43/ipvanet/imagemDinamica.dContent obs: qual a finalidade em querer carregar o captcha terceiro usando o curl ? o intuito é exibir o captcha na sua página pessoal ? Compartilhar este post Link para o post Compartilhar em outros sites
Leuuuuu 0 Denunciar post Postado Outubro 23, 2011 O site que eu preciso pegar o captcha vai estar em manutenção hoje ¬¬ O objetivo é fazer as consultas na minha página, sem precisar acessar os sites dos Detrans, quero colocar as consultas de débitos todas em um único local, sem é claro fugir as regras deles, cada estado tem a sua regra para consulta e isso é respeitado. --------------- Ponto de Mesclagem -------------- Já tentei até utilizar proxy no cURL e acontece a mesma coisa, no servidor local funciona, no remoto não, inclusive agora estou tendo o mesmo problema com mais uma URL, e já tentei substituir o o endereço pelo IP, e acontece o mesmo, local funciona, remoto não. Não sei mais o que fazer. Se alguém já teve algum problema parecido e puder me dar uma mão, serei muito grato. Obrigado. --------------- Ponto de Mesclagem -------------- Ainda não encontrei a solução, mas descobri como fazer dar o mesmo erro na maquina local curl_setopt($ch, CURLOPT_INTERFACE, 'localhost'); Quando coloco esta opção tenho o mesmo problema no servidor local, creio que o CURLOPT_INTERFACE vai resolver meu problema xD alguem pode me ajudar com isso ? Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Outubro 24, 2011 Bom, aqui menciona alguma coisa a respeito. É dito que você não deveria mexer com essa opção, pois poderia fazer o conteúdo não chegar até você, indo para outra pessoa. Porém, de repente, se você setar o IP do seu servidor você consiga passar por alguma verificação HTTp que o servidor alvo esteja fazendo e ainda direcionar a resposta para você mesmo, quando online. É uma POSSIBILIDADE, não garanto que funcione, já que na verdade nunca usei essa opção... Mas mesmo se funcionar, eu sugeriria que você tentasse outras possíveis abordagens, já que isso cheira à uma bela gambiarra. Experimenta utilizar file_get_contents() utilizando-se de uma Stream Context detalhada. Se passar, seu servidor pode ter alguma má configuração padrão na cURL. Se não funcionar, resta a você comparar via phpinfo() direitinho sua máquina local e seu servidor. E tentar descobrir o que há de diferente que possa estar conflitando. A propósito, evite Posts UP. É contra as regras e pode fazer seu tópico não ser mais "levado a sério", digamos assim. :thumbsup: Compartilhar este post Link para o post Compartilhar em outros sites
Leuuuuu 0 Denunciar post Postado Outubro 24, 2011 Bruno primeiro me desculpe pelos "UP" eu realmente só queria atualizar sobre o "progresso" que tive. Tentei fazer isso: $data = file_get_contents($url); e realmente o servidor não está alcançando o destino, poderia o servidor que estou tentando pegar a imagem ter bloqueado requisições de um site? com o codigo acima o erro foi: failed to open stream: Connection timed out E a coisa ta cada vez mais complicada :( Obrigado pela ajuda. Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Outubro 24, 2011 Mas você leu meu post todo? A função sozinha não vai ser de muita ajuda pois ao que parece esse site está considerando diversas possibilidades para evitar o hotlink. Você vai precisar das Stream Contexts. Veja o exemplo do timeout: $opts = array( 'http' => array( 'timeout' => 60 ) ); $content = file_get_contents( $url, FALSE, stream_context_create( $opts ) ); Tenta esse, se precisar de mais alguma coisa, adicione outra opção. E mais outra, e mais outra até ficar uniforme local e remotamente. As opções de contexto você encontra aqui, muito embora você acabe usando muito mais as de HTTP do que as outras. É uma forma bem menos poderosa que a cURL, mas justamente por sua simplicidade, pode resolver seu problema. Compartilhar este post Link para o post Compartilhar em outros sites