Вопрос работа с http |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.
Вопрос работа с http |
Unconnected |
Сообщение
#1
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Привет всем. Возникла такая задача - нужно научить прогу скачивать файл с файлообменника. И всё бы хорошо, делать это я умею (да и гугл знает), если есть конкретная ссылка на файл, а на нужном файлообменнике (depositfiles.com, да он и не один такой) сначала нужно подождать 60 сек, а потом уже дадут ссылку. И я вот не знаю, как вообще этот механизм работает и как с ним взаимодействовать. Так понял, там скрипт крутит счетчик, и в нужный момент запрашивает ссылку, что ли, и отображает.. как это дело парсить (или что с ним делать вообще )?
-------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
Сообщение
#2
|
Гость |
Un, ты меня удивляешь У тебя браузер какой? FF? Тогда берешь расширение HttpFox, и смотришь, что и как браузер посылает сайту при переходе к скачиванию файла, и что получает назад при окончании ожидания.
Вот как-то так оно выглядит: Эскизы прикрепленных изображений |
Unconnected |
Сообщение
#3
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Да сниффил поначалу, сторонней прогой, но потом решил, что спросить будет надежней)
Так.. ну, по чему ориентироваться, понятно, передаётся код кнопки: Цитата <form action="http://fileshare289.depositfiles.com/auth-129934243402395ccd7ecf0e1b2b482b-**********-6211454469-79545849-guest/FS289-3/______________________________________________.txt" method="get" onSubmit="download_started(); , но - как дать скрипту понять, что его исполнения "кто-то ждёт", смотрит на таймер, то есть это типа в браузере всё происходит.. или достаточно просто из делфей послать запрос "нажатие на кнопку "бесплатно" и ждать минуту, и нужный пакет всё равно придёт? Или, быть может, имелось в виду то, что можно сразу серверу послать, что таймер отработал, и он ссылку без боя отдаст?) Сообщение отредактировано: Unconnected - -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
Сообщение
#4
|
Гость |
Без боя не отдаст. Там вся игра должна происходить с TIdMultiPartFormDataStream (оно в модуле IdMultipartFormData, не забудь подключить). То есть, если ты делаешь так:
IdHTTP1.Request.ContentType :='multipart/form-data';, а потом посылаешь IdHTTP1.Post(myURL, mpFormDS); // шлем запрос по адресу с параметрами, то он будет означать не только открыть страницу, а еще и нажать на кнопку, означенную в mpFormDS. Ну, а дальше - подождать редиректа и выдернуть адрес - это дело техники. Вот только проверить я это не могу, у меня 2009, а там, блин, с кодировками в Инди все не просто плохо, а очень плохо. Отошлётся какая-то белиберда, и кнопка не нажмётся... Эх, почему она по-русски названа? Было бы латинскими буквами - проблем бы не было. Может, ранние версии и сработают, семерка, например. Ссылка в тему: тут |
Unconnected |
Сообщение
#5
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Короче сделал всё по инструкции (кстати, вот интересный блог, где программист Маша рассказывает про http и как с ним работать), пока в тестовой проге:
procedure TForm1.Button1Click(Sender: TObject); Обновил, кстати, Indy до 10й версии - думал, начнёт работать в паре с KOL-ом, ан нет, не шмогла, AV был непобедим.. (( На событие OnRedirect поставил окошко Showmessage, но через минуту оно не выпрыгивает. Верно делаю? Запрос вроде нормальный уходит: Сообщение отредактировано: Unconnected - -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
Сообщение
#6
|
Гость |
Цитата На событие OnRedirect поставил окошко Showmessage, но через минуту оно не выпрыгивает. Попробуй чуть по-другому: ты в результате посылки своего POST-запроса получаешь страничку от сервера со временем = 60 сек? Если все в порядке - должен получать, я проверил на англоязычной версии Депозита (запихал ответ в html-файл, и открыл в браузере). В ней смотри, там должна быть строка такого вида:$('#download_container').load('/get_file.php?fid=7fa2e25276abcbf6ebb746300c90cc0e'); Вот то, что выделено - тебе нужно. Добавляешь перед этим еще и хост (hТТp://depositfiles.com/ru), и высылаешь серверу еще одним POST-запросом. Угадай, что получишь в ответ? |
Unconnected |
Сообщение
#7
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Да, получаю страницу со временем, вытаскиваю ID, шлю так:
var s:string; , и даже происходит редирект (событие срабатывает), но приходит код главной страницы) Или, может, в нем спрятана как раз нужная ссылка? fileid вытаскивается норм, проверял, длина 32 символа(с приставкой - 50).. added: сейчас заметил, что "get_file" встречается в странице с таймером дважды, но там одно и то же, да и нужная идет раньше, pos её возьмет.. Сообщение отредактировано: Unconnected - -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
Сообщение
#8
|
Гость |
Не, не так. Смотри:
function Get_Address (s : string) : string; Вот чего я наблюдаю в Мемо: Цитата GET: <form action="http://fileshare177.depositfiles.com/auth-12994305304167710eedc23c832841b4-109.66.201.115-624149232-34756774-guest/FS177-9/cs16full.exe" method="get" onSubmit="download_started();show_begin_popup(0);"> <input class="download" value="Скачать файл" type="submit"/> </form> Ну, что с этим делать - разберешься, я думаю... Кракозябры - из-за кодировки, я предупреждал. Эскизы прикрепленных изображений |
Unconnected |
Сообщение
#9
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Ураа, заработало ) Я сначала и Get-ом тоже пробовал, без ожидания правда - вываливалась ошибка. Спасибо!
-------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
Unconnected |
Сообщение
#10
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Ааа блин, щас с ума сойду На второй день охоты поймал невероятный баг: если вставить в тестовую прогу ссылку руками (например, эту: http://depositfiles.com/files/yu3qmo80r) - качает! А если получить ссылку с сервера, раскодировать base64 и расшифровать - не качает! После этих манипуляций линк вполне нормальный, ни лишних пробелов, ничего, вот, копирую: http://depositfiles.com/files/x3eh8al4e, и при вставке в адресную строку замечательно качает..
Сообщение отредактировано: Unconnected - -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
Сообщение
#11
|
Гость |
Не понял... Что куда ты вставляешь? Вот я сейчас взял твою вторую ссылку, программа (из сообщения №8) вытянула из неё прямую ссылку на файл: _http://fileshare272.depositfiles.com/auth-1300129354687f4cb6f23c23f505a8ea-109.66.201.115-655468324-80478446-guest/FS272-2/Konstantion_-_Inspiration_broning_remix.mp3 Что дальше делать с этим? Как убедиться, что "не качает!"? Ибо беру, вставляю в адресную строку - все замечательно скачивается. Так что надо сделать?
|
Unconnected |
Сообщение
#12
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
А, чёрт... вот же, совсем забыл про ограничения на подключения. Сейчас залез - а мой ip там ждёт 21 минуту. А то я уж не знал, что делать, не приходил этот fid, и всё тут. И так совпадало, что на ручные ссылки лимит был, а на получаемые - кончался) Ну ничего, сейчас включю впн-клиент..
Сообщение отредактировано: Unconnected - -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
Unconnected |
Сообщение
#13
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
И ещё - просто может пригодится кому-нибудь - частично проблема заключалась в том, что в последней ссылке не было заветного RU(на чём завязано всё): http://depositfiles.com/RU/files/x3eh8al5e
Сообщение отредактировано: Unconnected - -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
Unconnected |
Сообщение
#14
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Принимается, как видно в правом окне, два печенья.. Кинул на форму CookiesManager, связал его с TIdHttp, Allowcookies:=true, и теперь надо в дальнейшем в одном запросе подставлять одно печенье, а в другом - другое. Короче, оба использовать. Как их устанавливать так, сначала одно, потом другое? И да, почему-то в поле collections только одно наблюдается..
В принципе, можно в текстовом виде оба печенья вытащить из CommaText и потом подставлять, да? Можно наверное менеджер и не использовать, хост я и так знаю, да ещё там вроде проблемы всякие бывают.. Сообщение отредактировано: Unconnected - -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
Текстовая версия | 24.12.2024 0:18 |