Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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(); 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);{ | 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
:seta: fwrite
Sim, certeza!
Tamanho do arquivo é 0 como mostra no echo que citei.
[size_download] => 0
/applications/core/interface/imageproxy/imageproxy.php?img=http://imovelavenda.com.br/img/teste.jpg&key=f5f8a4ea09a1acb197d6e634ab869a4fe36ec480c02a6a01d2f7910bd04e9bf1" alt="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();));
$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:
>
veja esse post:
http://forum.imasters.com.br/topic/446928-problema-com-curl/?p=1768636
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!
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..