通过CURL发布数据获取文件

时间:2011-02-22 04:43:14

标签: php curl

我有一个您发布数据的Web服务,它会返回一个txt.gz文件。我正在尝试使用cURL发布信息,但是我不知道如何准备好并处理我下载的文件。

我得到了成功的回应;但文件是0 KB,显然没有下载。任何帮助将不胜感激!

目前我正在做的事情:

$url = 'http://www.mywonderfulurl.com';
$fields = array('id'=>'123');
$fields_string = 'id=123';
$useragent="Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1";

$ch = curl_init();

// set user agent
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);

//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);

curl_setopt($ch, CURLOPT_TIMEOUT, 250);
curl_setopt($ch, CURLOPT_FILE, 'download.txt.gz');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    if (file_put_contents('download.txt.gz', curl_exec($ch)) === false) {
        // Handle unable to write to file error.
        echo('you failed');
        exit;
    }



echo curl_getinfo( $ch, CURLINFO_HTTP_CODE );
//close connection
curl_close($ch);

1 个答案:

答案 0 :(得分:0)

你永远不会写文件。

您需要将结果写入文件。

fwrite($fp, $result);

您可能最好使用file_put_contents,然后您无需打开/关闭文件。

http://php.net/manual/en/function.file-put-contents.php

if ($file_put_contents('download.txt.gz', curl_exec($ch)) === false) {
    // Handle unable to write to file error.
}

但是在将它保存到文件之前,可能使用两者之间的$ result来检查请求是否正常。

您应该检查curl_exec()

的回复
$result = curl_exec($ch);
if ($result === false) {
    echo 'Curl error: ' . curl_error($ch);
}

false写入文件会导致文件为空,因此可能会发生这种情况。