[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: CURL и загрузка файла
Soldier Ghost
Всем привет, в общем сразу к делу.
Нужно с помощью Curl закачать файл т.е. например: есть сайт http://site.com/file если на него зайти то будет просто белая страница, но если отправить POST данные то он после отправки предложит скачать файл, файл без расширения называется file и всё. Так вот нужно скачать файл после отправки данных методом POST который предложит сервер, POST отправил, а скачать незнаю как ) пробывал c помощью copy(); но качается пустой файл, а нужно чтоб был с инфой.
Или может можно просто както его на стороне открыть мне из него нужна вся информация.



Спустя 19 минут, 48 секунд (12.05.2010 - 15:58) Kuzya написал(а):
В Google набираем "curl php отправка POST" - первая страница просто кишит информацией на эту тему.

Спустя 4 минуты, 29 секунд (12.05.2010 - 16:03) Soldier Ghost написал(а):
так отправить методом POST я могу, мне нужно скачать файл после этого

Спустя 3 минуты, 50 секунд (12.05.2010 - 16:07) Kuzya написал(а):
Функция curl_exec() при отправке запроса возвращает ответ сервера либо в stdout, либо в переменную. Можно поместить ответ сервера в переменную и её содержимое сохранить через file_put_contents()

Спустя 1 минута, 51 секунда (12.05.2010 - 16:09) DedMorozzz написал(а):
Глянь фаербагом иль темпер датой, какие пост данные отправляються при нажатии на "скачать файл". И их передавай. Это же самый что ни есть обычный парсер.
После того как увидешь, какие данные передаёшь их и подставь. И будет тебе счастье.

Спустя 24 минуты, 33 секунды (12.05.2010 - 16:33) Soldier Ghost написал(а):
Цитата (Kuzya @ 12.05.2010 - 13:07)
Функция curl_exec() при отправке запроса возвращает ответ сервера либо в stdout, либо в переменную. Можно поместить ответ сервера в переменную и её содержимое сохранить через file_put_contents()

curl_exec() говорит 1 типа TRUE и всё

Цитата (DedMorozzz @ 12.05.2010 - 13:09)
Глянь фаербагом иль темпер датой, какие пост данные отправляються при нажатии на "скачать файл". И их передавай. Это же самый что ни есть обычный парсер.
После того как увидешь, какие данные передаёшь их и подставь. И будет тебе счастье.

Какие POST данные я отправляю я знаю

Спустя 8 минут, 9 секунд (12.05.2010 - 16:41) DedMorozzz написал(а):
	curl_setopt($ch, CURLOPT_URL,'http://site/ts.aspx');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $ExportPost);
$result = curl_exec ($ch);
file_put_contents('step5.html',$result);
echo $result;

От пример куска парсера, которым я как раз скачивал файл.
Возможно добавь куки, я кинул 5й шаг (там в несколько действий всё делалось). ну и переменая $ExportPost - массив передаваемых пост данных

Спустя 3 минуты, 28 секунд (12.05.2010 - 16:45) Kuzya написал(а):
Взгляни на пример DedMorozzz. Если выводится 1 то скрипт и возвращает 1. Может быть происходит редирект? Попробуй установи в CURL`е опцию "Следовать редиректам" (не помню как она в оригинале называется), авось поможет.
Может быть ещё такой вариант, что при нажатии кнопки уходят AJAX-ом POST-данные, скрипт их проверяет, возвращает 1 (типа всё нормально), и средствами JS тебя бросает на загрузку файла?

Спустя 1 минута, 53 секунды (12.05.2010 - 16:47) DedMorozzz написал(а):
ну может понадобиться:
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_COOKIESESSION, 1);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'путь к кукам');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'путь к кукам');
Но в моём примере эти моменты были реализованы на промежуточных шагах. Сам момент скачивания файла, был реализован на предыдущих результатах, следовательно куки не нужны(страница та же) и переходить никуда не надо.

Спустя 25 минут, 4 секунды (12.05.2010 - 17:12) Soldier Ghost написал(а):
Нет редиректа но я заметил сменился Content-Type на application/ocsp-response
поставил в скрипте curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
Всё равно качает файл с содержимом 1
JS или аякс не используется
чтож делать
вот сайт http://ocsp.pki.kz:62223/cgi/status вот названия принимаемого POST массива certificate

Спустя 2 минуты, 48 секунд (12.05.2010 - 17:14) DedMorozzz написал(а):
эм, сайт который ты дал - вообще без контента.
Дай сайт с которого надо скачивать что-то.

Спустя 3 минуты, 8 секунд (12.05.2010 - 17:18) Soldier Ghost написал(а):
Ну вот создай форму обработчиком сделай ту ссылку которую я тебе дал, создай инпут с именем certificate и кнопку отправить и увидиш как это работает )

Спустя 6 минут, 19 секунд (12.05.2010 - 17:24) DedMorozzz написал(а):
Я тебя не понимаю. Если я ничего не вижу, то я ничего и не получу, а если надо какие-то пост данные отправить, после которых я перейду на ту страницу, о намного быстрее эт сделаю сам. И кроме того отправил туда я пост запрос: certificate=asdsad. Ничего не произошло. Дай саму страницу, гляну

Спустя 59 минут, 20 секунд (12.05.2010 - 18:23) Soldier Ghost написал(а):
вот я через эту штуку отправляю

<html>
<head>
<meta
http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>
Проверка</title>
</head>
<body>

<FORM
id=myform name=myform method=post action="http://ocsp.pki.kz:62223/cgi/status">
<DIV
align=center>
<TABLE
cellSpacing=2 cellPadding=1 width=350 border=0>
<TBODY>
<TR>
<TD
bgColor=#faba43>
<TABLE
cellSpacing=0 cellPadding=7 width="100%" border=0>
<TBODY>
<TR
bgColor=#fefdf1>
<TD
noWrap align=right width="40%">
<font
color="red" face="Arial" size="2">Сертификат:</font>
</TD>
<TD>
<textarea
id=certificate name=certificate rows=10 cols="140"></textarea>
</TD>
</TR>

<TR>
<TD
align=middle colSpan=2>
<br><input
type="submit" value="Проверить" name="submit" >
</TD>
</TR>
</TBODY>
</TABLE>
</TD>
</TR>
</TBODY>
</TABLE>
</DIV>
</FORM>
</body>
</html>


Спустя 10 минут, 44 секунды (12.05.2010 - 18:34) DedMorozzz написал(а):
ну скажем так, в твоём примере - текст ареа вообще не нужна.

Спустя 15 минут, 49 секунд (12.05.2010 - 18:50) Soldier Ghost написал(а):
Да я знаю я же не этой формой делаю всё это просто грубый пример.
Ну чё закачку файла увидел?

Спустя 7 минут, 43 секунды (12.05.2010 - 18:58) DedMorozzz написал(а):
да, увидел, ща смотрю

Спустя 11 минут, 13 секунд (12.05.2010 - 19:09) DedMorozzz написал(а):
хз, возможно результат и получаю. Что должно быть в том файлике? Там 5 байт всего.

Спустя 4 минуты, 49 секунд (12.05.2010 - 19:14) Soldier Ghost написал(а):
закодированный в base64_encode(); текст
уу, у тебя 5 байт, у меня 1 ) так что у тебя действительно наверное есть результат
покажи как сделал

Спустя 1 час, 37 минут, 44 секунды (12.05.2010 - 20:51) Дед Мороз написал(а):
завтра приду на работу - кину скрипт

Спустя 13 минут, 58 секунд (12.05.2010 - 21:05) Soldier Ghost написал(а):
ок, а ты скажи хотяб через что делал ? я может сам ща по тыкаю

Спустя 9 часов, 39 минут, 22 секунды (13.05.2010 - 06:45) Kuzya написал(а):
Не знаю как так может ничего не получаться. Вот попробовал из командной строки сделать простой POST-запрос с параметром certificate:
curl -F "certificate=test" http://ocsp.pki.kz:62223/cgi/status
Всё срабатывает. В подобных случаях лучше брать утилиты типа Paros`а и полностью просматривать обращение к серверу и его ответ. Я там ничего необычного не нашёл. Уходит запрос - приходит файл (те вышеупомянутые 5 байт). Сделал тоже самое в командной строке - получил содержимое файла, как предполагал.
Следовательно, сделай обычную отправку POST и радуйся smile.gif А если не получается - дело уже в другом чём-то. Возможно как-то не так CURL настраиваешь. Может быть кто-нибудь даст тебе прям готовый код smile.gif А лучше всего попробуй написать на сокетах POST-запрос. Скорее всего этот вариант должен сработать.

Спустя 15 минут, 5 секунд (13.05.2010 - 07:00) Soldier Ghost написал(а):
Обычную отправку пост сделал а дальше что делать незнаю курл же не будет за меня этот файл качать
вот как у меня это обычная отправка POST

curl_setopt($curl, CURLOPT_USERAGENT, 'Браузер');
curl_setopt($curl, CURLOPT_URL, $url_ocsp);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, "certificate=test");

Спустя 18 минут, 17 секунд (13.05.2010 - 07:18) Kuzya написал(а):
Дак и не надо ничего качать. Для CURL`а что скачивание файла, что ответ обычной страничкой - всё выглядит одинаково. Это, по сути, одни и то же, только заголовки у таких ответов разные.
Как я раньше уже писал, просто заноси в переменную то что возвращает curl_exec(), и содержимое переменной потом сохраняй в файл через file_put_contents(). И получится у тебя тоже самое что ты сохраняешь файл через браузер.

Спустя 18 минут, 23 секунды (13.05.2010 - 07:36) Soldier Ghost написал(а):
Увы но у меня ничего не выходит по прежнему создаёт файл с содержимым 1
вот код:

curl_setopt($curl, CURLOPT_URL, $url_ocsp);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, "certificate=test");

if($html = curl_exec($curl))
{
file_put_contents('status.txt', $html, FILE_APPEND);
}
else
{
echo 'Неудача';
}

С установленным curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); выдаёт неудачу

Спустя 19 минут, 53 секунды (13.05.2010 - 07:56) Kuzya написал(а):
Хех, всё работает правильно. Попробуй сделать echo $html на выходе и запусти скрипт из командной строки smile.gif Это текстовые редакторы преобразуют то что возвращается в единицу. Вывожу в консоль то что возвращает curl - всё как надо. Пишу в файл - единица. Вот в чём проблема smile.gif

Спустя 2 минуты, 22 секунды (13.05.2010 - 07:59) Soldier Ghost написал(а):
В консоль ты имееш в виду shell_exec(); ?
если да то покажи что писать, а то я с консолем не дружу

Спустя 29 минут, 35 секунд (13.05.2010 - 08:28) Kuzya написал(а):
Заходишь в командную строку, набираешь "php /путь/к/скрипту" жмёшь Enter и скрипт выполняется.
Только незабудь запись в файл заменить на echo или print.

Спустя 8 минут, 14 секунд (13.05.2010 - 08:36) Soldier Ghost написал(а):
посмотри у себя если ты отправиш в POST запросе не test а то что я написал выше какой результат выдаст?

Всё проблему решил дело было в значение пост данных нужно было обработать их urlencode(); и результат появился в файл по прежнему записывается циферка 1 но мне в файл уже ничего заисывать не нужно буду работать с переменными.
Спасибо дед мароз и спасибо кузя
А так же спасибо твину


_____________
Schecter damien 6 FR
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.