我有一个您发布数据的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);
答案 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
写入文件会导致文件为空,因此可能会发生这种情况。