通过curl

时间:2017-11-20 12:15:45

标签: php curl download

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

其中一个功能是将文件下载到网站空间,但文件大小与文件不同,我通过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 );
    }
}

1 个答案:

答案 0 :(得分:0)

现在可行。

xml文件不一样,虽然我是第一个想到的。

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