Mnobody
@Mnobody

Интернет-бот. Почему не получается реализовать скачивание с «перенаправлением»?

Пишу бота на php, среди всего пречего он должен логиниться (использую cURL) и скачивать файлы. Скачивать можно только когда пользователь(или бот) авторизиирован. Авторизацию получилось сделать а вот скачивание нет.
С "перенаправлением" - без записи на своем сервере. Тоисть сразу отдавать пользователю.

Посылаю серверу POST запрос с нужными данными (fileId и VerificationToken которые есть в коде html страницы). Он мне возвращает json в которм есть ссылка на редирект (если скачивать нормально в браузере, то скачивание начинаеться автоматически).
JSON
	redirectUrl=http://s5905.somesite.pl/File.aspx?e=dlinnyj_hasz_kod
	refreshTopBar=False
	topBar=<div class="topbarLoginContainer"> html контейнера для авторизации, также 2 ссылки на картинки, но картинки больше чем 1х1</div>
	trackingCodeJS=_gaq.push(['ch._trackEvent', 'Files', 'Download', 'Download_File']);
	Type=Redirect


Достаю оттуда ссылку на редирект, выдаю через echo link.
При попытке пойти по ссылке выдает:
Object moved to <a href="/Error.aspx?aspxerrorpath=/File.aspx">here</a>.

И выдает ошибку 302 found.

Условие такое что не можно скачивать на сервер и потом отдавать, а отдавать сразу с исходного сервера.

Какие идеи? Что я упустил? В чем может быть проблема?

Лирическое отступление: Люди, не используйте шрифты в которых I (большая и) похожа на l (л). Первый раз прочитал field вместо fileId и пара часов пошла вникуда.
  • Вопрос задан
  • 3107 просмотров
Решения вопроса 1
Mnobody
@Mnobody Автор вопроса
Удалось сделать скачивание. В основном из-за того что сайт плохо защищен.
Я просто не заметил в длинном хэш коде ответа(фомата json) знак \u0026, который в последующем get запросе нужно заменить на &. Таким образом будет посылаться два параметра а не один, как я делал раньше.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Webdesus
@Webdesus
Такое вряд ли возможно. Если только попробовать еще сохранять куки дополнительно и не просто кидать линк, а еще внедрять сохраненные куки. Тогда если сайт хранит сессию долго на файл, то удастся скачать. Нет ну тогда это не реально в таком условии. Ведь когда вы нажимаете на ссылку вы для сайта являетесь уже совершенно другим клиентом, не тем кто запрашивал ссылку в первый раз. По этому и результат такой.
Ответ написан
Комментировать
sHinE
@sHinE
веб-разработчик, php/js/mysql и сопутствующее
Насколько я помню по опыту ковыряния php-proxy могу сказать, что через curl получалось только сохранить контент файла в переменную, а потом вывести её пользователю. При этом размер файла ограничен памятью, доступной для php.
При использовании сокетов можно сделать потоковое скачивание - т.е. прочитали часть файла - выдали её клиенту. Вот тут http://sourceforge.net/projects/poxy/ можно принцип посмотреть.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы