2015-11-04 79 views
2

我试图从https URL下载带验证的.xml.gz文件。PHP Curl从https URL下载空文件(.gz)

这是我目前的代码。

$remote_file = 'https://path/filename.xml.gz'; 
    $local_file = "test.xml.gz"; 
    $username ="21"; 
    $password ="qwerty"; 

    $ch = curl_init($remote_file); 
    $headers = array('Content-type: application/x-gzip','Connection: Close'); 
    $fp = fopen ($local_file, 'wb'); 

    curl_setopt($ch, CURLOPT_URL,$remote_file); 
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 
    curl_setopt($ch, CURLOPT_SSLVERSION,3); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 50); 
    curl_setopt($ch, CURLOPT_FILE, $fp); 
    curl_setopt($ch, CURLOPT_HTTPHEADER,$headers); 
    $data = curl_exec($ch); 
    if(fwrite($fp,$data)) 
    { 
    echo "success"; 
    } 
    else 
    { 
    echo "fail"; 
    } 
    curl_close($ch); 
    fclose($fp); 

执行后,test.xml.gz文件被创建,但是为空。

我认为问题在于连接到https页面中的文件。当我尝试从非https网址下载文件时,代码似乎工作正常。

奇怪的是,卷曲显示没有错误任何

回答

1

使用curl verbose输出跟踪后,我发现问题是$头。显然,删除$ headers并使用curl_setopt($ curl,CURLOPT_HEADER,true)替换按预期工作。

下面是最终的代码。

$fp = fopen($local_file, 'wb'); 
$ch = curl_init($remote_file); 
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 
curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password); 
curl_setopt($ch, CURLOPT_SSLVERSION,3); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
curl_setopt($curl, CURLOPT_HEADER, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_URL, $remote_file); 
$result = curl_exec($ch); 
$write = fwrite($fp,$result); 
1

您需要的结果存储从curl_exec在给一个变量:

$fileContents = curl_exec($ch); 

该文件的内容然后写到本地文件:

fwrite($fp, $fileContents); 

然后它应该按需要工作。

+0

@ Heru-Luin好点,更正! – Ashley

+0

嗨,我也试过。似乎没有工作。我已更新问题详细信息中的代码 –

+0

如果输出$ data的内容,您会得到什么?另外,看看你是否使用curl_error($ ch)得到卷曲错误将是一个不错的选择。 – Ashley