从命令行使用curl或wget获取文件不起作用(在php中它正在工作....)

时间:2015-12-29 10:51:13

标签: curl wget

我在Ubuntu 15上....

我需要下载此开放数据CSV http://www.sviluppoeconomico.gov.it/images/exportCSV/prezzo_alle_8.csv

来自此页面

http://www.sviluppoeconomico.gov.it/index.php/it/open-data/elenco-dataset/2032336-carburanti-prezzi-praticati-e-anagrafica-degli-impianti

我想使用简单的wget或curl命令行,但如果我尝试例如

curl http://www.sviluppoeconomico.gov.it/images/exportCSV/prezzo_alle_8.csv pippo.csv

结果是

<html><head><title>Richiesta Rifiutata</title></head><body>La URL Richiesta e' stata riufiuta. Contattare l'amministratore di sistema.<br><br>The requested URL was rejected. Please consult with your administrator.<br><br></body></html>    
<html>
 <head><title>302 Found</title></head>
  <body bgcolor="white">
   <center><h1>302 Found</h1></center>
   <hr><center>nginx/1.4.6 (Ubuntu)</center>
  </body>
</html>

如果我使用

,结果相同
wget http://www.sviluppoeconomico.gov.it/images/exportCSV/prezzo_alle_8.csv 

我试过使用简单的php程序

<?php
 $url = 'http://www.sviluppoeconomico.gov.it/images/exportCSV/prezzo_alle_8.csv';

 print $url;
 echo '<br>';
 echo '<br>';

 //#Set CURL parameters: pay attention to the PROXY config !!!!
 $ch = curl_init();
 curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
 curl_setopt($ch, CURLOPT_HEADER, 0);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($ch, CURLOPT_URL, $url);
 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
 $data = curl_exec($ch);
 curl_close($ch);

 echo $data;
?>

在这种情况下,CSV文件的数据会打印在我的浏览器页面上(我要等待它,但它已打印出来....)。

所以,我认为应该可以从命令行使用curl或wget下载数据,可能还有一些我应该设置的参数,但我现在还没有解决方案......

有什么建议/例子吗?

提前谢谢!!

切萨雷

1 个答案:

答案 0 :(得分:2)

您需要在-L命令中使用curl开关,因为您使用PHP代码中的curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);来执行重定向。

有关此-L切换的详细信息,请访问:http://curl.haxx.se/docs/manpage.html#-L

还使用以下选项

覆盖默认的curl用户代理字符串(即User-Agent: curl/7.40.0
 -A "Opera"

对于wget命令,为useragent string添加以下开关。

-U "Opera"