Ir para conteúdo

POWERED BY:

Arquivado

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

moltt

cURL não consegue fazer download de arquivo externo.

Recommended Posts

Pessoal,

 

Não estou conseguindo realizar o download de um arquivo externo pelo cURL do PHP, e antes que perguntem, estou com allow_url_fopen = On em Master e Local. Tanto que em vez de utilizar cURL posso simplesmente usar copy() que o arquivo é baixado normalmente para o meu servidor. O problema é que preciso das informações de curl_getinfo().

 

Este é o código de teste que estou utilizando:

<?
error_reporting(E_ALL);

$src            = 'http://www.iniciarcanoas.com.br/arquivos_integracao/BI_integracao_imovelavenda.xml';
$z                = '/home/usuario/public_html/tmp/TESTE.xml';

$fp                                = fopen($z, 'w+');
$ch                                = curl_init();
curl_setopt_array($ch, array(
    CURLOPT_URL                    => $src,
    CURLOPT_FILE                => $fp,
    CURLOPT_RETURNTRANSFER        => false,
    CURLOPT_BINARYTRANSFER        => true
));
$down                            = curl_exec($ch);
$info                            = curl_getinfo($ch);

echo '{ '.curl_error($ch).' | '.$down.' | '.print_r($info, 1).' }';

curl_close($ch);
fclose($fp);

O código acima irá criar o arquivo /home/usuario/public_html/tmp/TESTE.xml vazio! O cURL não consegue baixar o conteúdo e fclose() fecha o arquivo sem nada dentro. A linha do echo retorna o segunte resultado, sem nenhum erro por curl_error():

 

{ | 1 | Array ( => ://www.iniciarcanoas.com.br/arquivos_integracao/BI_integracao_imovelavenda.xml [content_type] => text/xml [http_code] => 200 [header_size] => 162 [request_size] => 113 [filetime] => -1 [ssl_verify_result] => 0 [redirect_count] => 0 [total_time] => 0.006103 [namelookup_time] => 0.003326 [connect_time] => 0.005004 [pretransfer_time] => 0.005064 [size_upload] => 0 [size_download] => 0 [speed_download] => 0 [speed_upload] => 0 [download_content_length] => 0 [upload_content_length] => 0 [starttransfer_time] => 0.00606 [redirect_time] => 0 ) }

 

 

Se eu simplesmente utilizar copy(), o arquivo /home/usuario/public_html/tmp/TESTE.xml é baixado corretamente possuindo cerca de 1,9 MB.

<?
error_reporting(E_ALL);

$src            = 'http://www.iniciarcanoas.com.br/arquivos_integracao/BI_integracao_imovelavenda.xml';
$z                = '/home/usuario/public_html/tmp/TESTE.xml';

copy($src, $z);

 

Alguém pode me dar uma luz do porquê cURL não está conseguindo baixar o arquivo? Sem retornar nenhum erro fica difícil.

 

 

Obrigado

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

tem certeza de que retorna vazio?

 

peloq ue parece está observando pelo browser.

 

um documento XML possui tags. Todo browser interpreta as tags, não exibindo-as de forma literal..

 

se estiver com o Chrome, pressione CTRL+U para ver resultado do fonte enviado ao browser..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, certeza!

 

Tamanho do arquivo é 0 como mostra no echo que citei.

 

[size_download] => 0

 

 

teste.jpg

 

A imagem acima mostra outros 2 testes de arquivos e fontes diferentes mudando apenas a origem e o destino:

 

<?
error_reporting(E_ALL);

//$src            = 'http://www.iniciarcanoas.com.br/arquivos_integracao/BI_integracao_imovelavenda.xml';
//$z                = '/home/usuario/public_html/tmp/TESTE.xml';

$src            = 'http://www.leandrocidade.com.br/arquivos_integracao/BI_integracao_imovelavenda.xml';
$z                = '/home/usuario/public_html/tmp/TESTE2.xml';

//$src            = 'http://strg-rnt.vistahosting.com.br/renasane/padrao4/vista.imobi/imovelavenda/padrao4.zip';
//$z                = '/home/usuario/public_html/tmp/TESTE3.zip';

$fp                                = fopen($z, 'w+');
$ch                                = curl_init();
curl_setopt_array($ch, array(
    CURLOPT_URL                    => $src,
    CURLOPT_FILE                => $fp
));
$down                            = curl_exec($ch);
$info                            = curl_getinfo($ch);

echo '{ '.curl_error($ch).' | '.$down.' | '.print_r($info, 1).' }';

curl_close($ch);
fclose($fp);

 

Com estes 3 testes, somente o primeiro retorna o arquivo vazio. Não consigo entender o porquê. Se acessar os 3 arquivos pelo navegador, todos estão disponíveis, mas o cURL não baixa o primeiro.

 

E se reparar o TESTE.xml, que baixa vazio é semelhante ao TESTE2.xml, que baixa corretamente com o cURL.

 

A questão é, porquê o cURL conseque baixar http://www.leandrocidade.com.br/arquivos_integracao/BI_integracao_imovelavenda.xml mas não consegue baixar http://www.iniciarcanoas.com.br/arquivos_integracao/BI_integracao_imovelavenda.xml ????

 

 

 

Cabeçalhos de retorno (CURLOPT_WRITEHEADER):

 

http://www.iniciarcanoas.com.br/arquivos_integracao/BI_integracao_imovelavenda.xml

 

HTTP/1.1 200 OK
Server: nginx
Date: Mon, 17 Mar 2014 00:55:51 GMT
Content-Type: text/xml
Content-Length: 0
Connection: keep-alive
Keep-Alive: timeout=15

 

 

http://www.leandrocidade.com.br/arquivos_integracao/BI_integracao_imovelavenda.xml

 

HTTP/1.1 200 OK
Date: Mon, 17 Mar 2014 00:58:17 GMT
Server: Apache
Last-Modified: Fri, 14 Mar 2014 17:32:05 GMT
ETag: "a2eb1-1a8817-4f49472c9af40"
Accept-Ranges: bytes
Content-Length: 1738775
Vary: Accept-Encoding
Content-Type: application/xml

 

 

 

 

:upset:

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Depois de vários chutes, consegui baixar o arquivo corretamente adicionando o parâmetro abaixo:

 

CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7'

 

 

Obrigado pela dica!

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.