| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Сети > Скачать файл |
| Автор: Poseidon 4.9.2005, 01:09 |
| Появилась необходимость закачать файл через https. Как это сделать не имею понятия. С этим протоколом не разу не работал. То, что работает для http, для https работать отказывается (оно и понятно). Но вот если с http я сталкивался, то с https ни разу. А реализовать нужно. Вот и прашу помощи. Если уже не функцией порадуете, каторая все делает, то хоть дайте направление, в какую сторону копать. Хотя функция была бы как раз кстати |
| Автор: Snowy 4.9.2005, 22:37 |
| А ты попробуй набрать в поиске http://forum.vingrad.ru/index.php?act=Search&CODE=show&searchid=c79bb35ef51215d3abd6ec7e2154d9b7&search_in=posts&result_type=topics&highlite=https Просто я уже устал рассказывать... |
| Автор: Poseidon 4.9.2005, 23:32 |
| Блин, Snowy, ты как с навичком со мной. Я первым делом залез в поиск форума и поиск DRKB. На фуруме ничего по САБЖУ не нашел, в DRKB есть одна интересная статейка, но не совсем то, что нужно. Вот и пишу тут. Может кто сталкивался и уже писал такую функцию для себя. Или хоть направление дайте, куда рыть. |
| Автор: Alex 5.9.2005, 00:12 |
| Poseidon, а без блинов можно? и чем тебе вот этот топик не подходит http://forum.vingrad.ru/index.php?showtopic=43642&hl=https |
| Автор: Poseidon 5.9.2005, 00:26 | ||||
PS. И вот еще какая интересная штука получается. Допустим есть jpg-файл. Если я пытаюсь его открыть (через https) в браузере, то все ОК. И даже пароля никакого не просит. А вот если пытаюсь скачать хотябы тем же Флешгетом, то пишет что пароль неверный. Спросил у своего системного администратора, она сказал что пароля нет. Это как? Использовать Username:= 'Anonymous', Password:= '' ? |
| Автор: Alex 5.9.2005, 07:59 | ||
Посмотреть, что за компоненты ты кинул и попытаться хоть немного подумать, а не ждать готового решения. И когда все это произойдет, то сделать поиск по форуму и найти хотя бы вот эту тему http://forum.vingrad.ru/index.php?showtopic=48563&hl=idhttp Порты не забудь нужные прописать в соответствии с первой темой и dll скачать |
| Автор: Poseidon 5.9.2005, 19:50 | ||
PS. А ведь в подписи моей правда |
| Автор: Snowy 5.9.2005, 20:02 |
| Готовое решение лежит на сайте Indy. Скачай Indy Demos. |
| Автор: Poseidon 5.9.2005, 20:24 |
| Все братья!!! Закачалось! То что хотел, достиг. Сказать "без вашей помощи" язык не повернется. Спасибо. Отдельное благадарю Snowy, за примеры в той самой теме, на каторую вы меня послали Вот уж действительно, если хочешь что-то сделать, сделай это сам. |
| Автор: Snowy 5.9.2005, 21:08 | ||
Тогда выкладывай код сюда. Так сказать, для будующих поколений. Пусть хотят по натоптаному пути, во избежании аналогичных вопросов. |
| Автор: Poseidon 5.9.2005, 23:02 | ||
| Используемые компоненты: TIdHTTP (вкладка Indy Clients), TIdSSLIOHandlerSocket (вкладка Indy I/O Handlers), TButton (для начала загрузки). В инспекторе обьектов для компонента TIdHTTP устанавливаем: BoundPort := 443; IOHandler:= IdSSLIOHandlerSocket1 Скачиваем две библиотеки http://www.intelicom.si/domcms.nsf/b22359a69e6184e185256d07000a3de0/8a3b424f424132d088256f4c0072c460/$FILE/indy_openssl096k.zip и копируем их в папку с программой.
|
| Автор: Poseidon 7.9.2005, 21:21 |
| А вот и подводные камни. При беспарольном доступе все работает на ура. Но вот при парольном... В компоненте TIdHTTP добавил: Request.Username:= 'MyUsername'; Request.Password:= 'MyPassword'; А выдает "Socket error # 10048 Adress already in use." Ничего понять не могу, идеи кончились Добавлено @ 21:22 Забыл добавить, что при заходе через браузер (IE) при этих же Имени и Пароле все ОК. Вот такие пираги |
| Автор: Snowy 7.9.2005, 21:34 | ||||
| BasicAuthentication в true ставил? Добавлено @ 21:42
IMHO стоит создавать все контролы динамически и убивать после использования. |
| Автор: Poseidon 8.9.2005, 16:32 | ||||
И вот что интересно. При первой попытке скачать все проходит. Но при повторе та же ошибка. Посмотрел в фаирволе, порт 443 никем не занят. Так что же мешает проге соединится заново? Причем, если подождать минуту-две, то все опять ОК. Это что, Винда не дает заново соединится? Так а как это можно обойти? |
| Автор: Snowy 8.9.2005, 16:52 | ||
Правильно будет:
И дестроить IdSSLIOHandlerSocket не нужно. Попробуй так. Я пока поковыряю исходняки Indy. |
| Автор: Poseidon 8.9.2005, 17:15 |
| Вот ***!!! Изменил в своем коде и все пашет на ура. Матов не хватает Snowy, отдельное спасибо за поддержку |
| Автор: Snowy 8.9.2005, 17:20 | ||
Ух. Я и не заметил, что ты BoundPort поставил, вместо порт BoundPort не трогай - он выбирается динамически, если не укажешь иного. Это порт на твоей машине, а не на удаленной. Поэтому сокет и глючил. Добавлено @ 17:23 BoundPort обычно выбирается автоматом из свободных из диапазона BoudMin и BoundMax. Я не знаю, по каким причинам он не освобождался в данном примере, но факт в том, что порт указан фиксировано и автомат поиска свободного был отключен. |
| Автор: Snowy 8.9.2005, 23:08 | ||
| Итак получаем на выходе готовое решение. Получить файл по HTTPS:
|