cURL не получает файл

agorlov

Новичок
не получается cURL'ом сохранять файлик с удаленного сервера. вот такого вида ссылка:

http://somesite.ru/export/csv.php?p=5089&type=nal

в ответ сервер должен отдать csv файлик. Если это скопировать в адресную строку браузера - то все работает "на ура", а если в php скрипт, то вроде все отрабатывается как и положено, а файлик не передается. Вот этот скрипт:

PHP:
$url = 'http://somesite.ru/export/csv.php?p=5089&type=nal';
$path = '/var/www/tmp/p_5089_K-Don S03_.csv';  
 
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
    curl_setopt($ch, CURLOPT_TIMEOUT, 0);
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLINFO_HEADER_OUT, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.63 Safari/537.31');
    curl_setopt($ch, CURLOPT_HTTPHEADER, array (
        "Connection: keep-alive",
        "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
        "Accept-Encoding: gzip,deflate,sdch",
        "Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4",
        "Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.3"
    ));
 
    $data = curl_exec($ch);
 
    print($data);
    echo'<br><hr>';
   
    curl_close($ch);
 
    file_put_contents($path, $data);
вот заголовки, которые шлет chrome если ссылку просто в адресную сроку скопировать:
GET /export/csv.php?p=5089&type=nal HTTP/1.1
Host: somesite.ru
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.63 Safari/537.31
Accept-Encoding: gzip,deflate,sdch
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.3
а вот это я скопипастил и curl заставляю отсылать:
[request_header] =>
GET /export/csv.php?p=5089&type=nal HTTP/1.1
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.63 Safari/537.31
Host: somesite.ru
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.3
Вот еще заголовки ответов сервера... Оригинал (из браузера):
HTTP/1.1 200 OK
Server: nginx/0.8.53
Date: Tue, 30 Apr 2013 09:49:14 GMT
Content-Type: text/csv
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/5.3.18
P3P: policyref="/bitrix/p3p.xml", CP="NON DSP COR CUR ADM DEV PSA PSD OUR UNR BUS UNI COM NAV INT DEM STA"
X-Powered-CMS: Bitrix Site Manager (5aec0109e...fc48d63cd3f)
Set-Cookie: PHPSESSID=bf38d77c6f1f781c0f0d6b5bc574a3d6; path=/; domain=somesite.ru
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-disposition: attachment;filename=file_export_nal_5089.csv
И то что cURL возвращает:
HTTP/1.1 200 OK
Server: nginx/0.8.53
Date: Tue, 30 Apr 2013 09:48:20 GMT
Content-Type: text/csv
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/5.3.18
P3P: policyref="/bitrix/p3p.xml", CP="NON DSP COR CUR ADM DEV PSA PSD OUR UNR BUS UNI COM NAV INT DEM STA"
X-Powered-CMS: Bitrix Site Manager (5aec0109e...fc48d63cd3f)
Set-Cookie: PHPSESSID=53c684f0ce81c0a75fa43326ae3bd920; path=/; domain=somesite.ru
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-disposition: attachment;filename=file_export_nal_5089.csv
вроде бы все хорошо, но данные не передаются и в итоге получаю файлик нулевой длинны :( Может кто подскажет, что я не так делаю?
 

agorlov

Новичок
Где?!
Пробывал с машины, на которой на этот сайт никогда не заходил и тем более не авторизовался - из браузера работает как надо и без кук. Только PHPSESSID и все.
 

dadoc

Новичок
Попробуйте HTTP 1.0 и уберите "Connection: keep-alive" из headers

PHP:
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
 

agorlov

Новичок
не помогло. ответ от сервера все равно приходит HTTP 1.1 и только заголовки, самих данных нет :(
 
Сверху