通过curl下载时文件大小不同



我写了一些php代码,下载了一个通过邮件从Google Adwords发送的xml文件,将数据放入mysql数据库。

其中一个功能将文件下载到Web空间,但文件的大小与文件不同,我通过chrome手动下载(1.8MB与1.6MB)。从视觉上看,它们之间没有区别。

手动下载的文件可以处理,但通过curl下载的文件不能用simplexml处理。

以下是下载功能的代码:

function downloadUrlToFile( $url, $outFileName ) {
if ( is_file( $url ) ) {
copy( $url, $outFileName );
} else {
$options = array(
CURLOPT_FILE => fopen( $outFileName, 'w' ),
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HEADER => false,
CURLOPT_TIMEOUT => 28800,
CURLOPT_URL => $url,
CURLOPT_HTTPHEADER => array(
'Host   hostname',
'User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:42.0) Gecko/20100101 Firefox/42.0',
'Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language    en-US,en;q=0.5',
'Accept-Encoding    gzip, deflate',
'Connection keep-alive', )
);
$ch = curl_init();
curl_setopt_array( $ch, $options );
curl_exec( $ch );
}
}

编辑:

这里的新代码也不起作用。我在标题中添加了:。但现在该文件为空(2kb)。

function downloadUrlToFile( $url, $outFileName ) {
if ( is_file( $url ) ) {
copy( $url, $outFileName );
} else {
$options = array(
CURLOPT_FILE => fopen( $outFileName, 'w' ),
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HEADER => false,
CURLOPT_TIMEOUT => 28800,
CURLOPT_URL => $url,
CURLOPT_HTTPHEADER => array(
'Host: '.gethostname(),
'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:42.0) Gecko/20100101 Firefox/42.0',
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language:    en-US,en;q=0.5',
'Accept-Encoding:    gzip, deflate',
'Connection: keep-alive', )
);
$ch = curl_init();
curl_setopt_array( $ch, $options );
curl_exec( $ch );
}
}

现在它可以工作了。

xml文件并不相同,尽管我最初是这么认为的

当服务器下载时,谷歌会以英语发送xml文件。手动下载时,它们将以浏览器的语言发送。

最新更新