Консультация № 184190
11.10.2011, 01:41
63.97 руб.
0 0 0
Уважаемые эксперты! Пожалуйста, ответьте на вопрос:
Как скачать *.csv файл с сервера, если ссылка на него не прямая, а передается в заголовке?
Опишу подробней. Есть сайт, в нем надо залогинится и скачать индивидуальный файл. Сначала авторизация, переход на страницу под авторизацией, это все ясно и просто:
Код:
<?php
$ch = curl_init('http://profit-bill.com/login.html');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.16) Gecko/20110319 MRA 5.7 (build 03796) Firefox/3.6.66');
$headers = array
(
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3',
'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7'
);
curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);
curl_setopt($ch, CURLOPT_REFERER, "http://profit-bill.com/");
curl_setopt($ch, CURLOPT_POSTFIELDS, 'login=quake3&password=111222');
curl_setopt($ch, CURLOPT_COOKIEJAR, "my_cookies.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, "my_cookies.txt");
curl_setopt($ch, CURLOPT_HEADER, true);
$result = curl_exec($ch);


curl_setopt($ch, CURLOPT_URL,'http://profit-bill.com/stats/detail.html');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, "my_cookies.txt");
$result = curl_exec($ch);

Там на странице есть ссылка "Скачать фрод-лист в формате CSV ", пробую перейти по этой ссылке, используя CURLOPT_FILE
Код:
$csvu='http://profit-bill.com/stats/fraud_csv.html?q_from=26%2F9%2F2011&q_to=2%2F10%2F2011';
$path = '1.csv';

$fp = fopen($path, 'w');
//curl_setopt($ch, CURLOPT_URL,$csvu);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //вывод ответа сервера
curl_setopt($ch, CURLOPT_COOKIEFILE, "my_cookies.txt");
curl_setopt($ch, CURLOPT_FILE, $csvu);


На что курл отвечает, что хендл файла не валидный. (supplied argument is not a valid File-Handle resource). Если смотреть хидеры, то когда браузер кликает на эту ссылку, сайт ему выдает такой заголовок
Код:
Content-Disposition: attachment; filename="fraud_11_09_26-11_10_02.csv"


Собственно, вопрос - как же мне это достать и скачать программно? Я в теории понимаю, что в переменную надо записать этот заголовок, точнее часть (filename="fraud_11_09_26-11_10_02.csv" ). Но какой путь указывать? Нормального примера не могу найти. Не обязательно курл, можно и сокеты, lwp или даже ассемблер, мне лишь бы понять суть, как получить полный путь к файлу.

Обсуждение

Форма ответа