Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Сети > работа с https |
Автор: PROme 25.2.2005, 17:57 |
Помогите по саюжу! На форуме ничего не нашел ![]() Нужно отправлять ПОСТом и ГЕТом данные по https и получать выдачу сервера... Как это можно организовать??? + разумеется, там нужна авторизация и все такое ![]() |
Автор: _hunter 25.2.2005, 18:09 | ||
справка по TIdHTTP. последний абзац:
|
Автор: Snowy 25.2.2005, 18:16 |
Ставим обработчик TIdSSLIOHandlerSocket на IdHttp и меняем порт на 443. По-моему должно так работать... Добавлено @ 18:16 Ой, пока перезагружался, уже ответили... Извиняюсь... |
Автор: PROme 25.2.2005, 20:36 |
_hunter спасибо, я это уже читал где-то на форуме... а пример нельзя? я только вот пару дней как снова начал работать с делфи после трех летнего перерыва к тому же такого никогда не делал ![]() |
Автор: _hunter 25.2.2005, 20:40 |
объект создать можеш? создай один типа TIdConnectionInterceptOpenSSL второй TIdHTTP потом свойству Intercept второго ( TIdHTTP ) присваиваеш первый. все. |
Автор: PROme 26.2.2005, 19:32 |
_hunter спасибо, уже ясней осталось только узнать де найти этот TIdConnectionInterceptOpenSSL ![]() в Делфи 7 я его не нашел ![]() |
Автор: _hunter 27.2.2005, 00:59 |
видать плохо искал: юнит IdSSLOpenSSL или закладка Indy Misc |
Автор: PROme 27.2.2005, 16:56 |
_hunter странно, юнит такой есть, а компонента на закладке Indy Misc нет ![]() че делать??? |
Автор: Snowy 27.2.2005, 17:35 |
Палитра Indy I/O Handlers, последний значек (с замочком). |
Автор: PROme 27.2.2005, 19:56 | ||
туда я сразу заглядывал у меня их там только 6 штук последний (с замочком) - IdSSLIOHandlerSocket ![]() |
Автор: Snowy 27.2.2005, 20:13 |
Ну так он тебе и нужен. |
Автор: PROme 27.2.2005, 20:45 |
ну тогда так как говорил _hunter сделать не выйдет он и другой компонент упоминал и не появляется ничего в свойстве Intercept второго ( TIdHTTP ) (если указать вручную - тут же выдает ошибку)... ![]() |
Автор: _hunter 28.2.2005, 00:05 |
щас гланул в делфях -- нужно IOHandler назначать |
Автор: Snowy 28.2.2005, 08:27 | ||||
Правильно. Intercept и не появится. Закладка-то называется IOHandlers. Вот IOHandler и нужно назначать ![]() |
Автор: PROme 28.2.2005, 12:49 |
точна! ![]() но вы очень сильно ошибались, если думали что так быстро от меня отделаетесь ![]() при попытке использования вылазит такой еррор: http://docs.com.ru/add/pic/err.png (6кб) де берется эта самая библеотека и надо ли ее куда-нить прописывать? заранее спасибо ![]() |
Автор: Snowy 28.2.2005, 13:06 | ||
Вот. Читай, качай, пользуйся. http://community.borland.com/article/0,1410,31279,00.html Добавлено @ 13:08 Цитирую, на случай, если страничка вдруг убежит
Переводить нуно? Для использования SSL нужно скачать файлы библиотек с сайта Indy. |
Автор: Александра 28.2.2005, 13:20 |
PROme длл'ки посмотри: http://www.indyproject.org/SSL.iwp Добавлено @ 13:21 эх... не успела, не увидела 2 странички )) Snowy опять опередил )) |
Автор: PROme 28.2.2005, 13:50 |
![]() пасибки! раздобыл libeay32.dll и ssleay32.dll а че с ними делать? помню для mysql когда-то прописывал их прям в параметре компонента а с этими... некуда ![]() копировал в папку с проектом, в вин, в либ... в системс32 винды... ничего ![]() ![]() че делать? спасайтеее ![]() |
Автор: Snowy 28.2.2005, 15:19 |
Нет, тут прописывать ничего не нужно. Сейчас расковырял индийский код - там библиотеки грузятся автоматом при коннекте к хосту. Значит закинь их System32. Видимо твой проект их просто не видит. dll-ки тупо грузятся, как обычные dll. |
Автор: PROme 28.2.2005, 15:59 |
![]() ![]() ![]() в System32 сразу закидывал закинул только что еще в системс, в саму виндовс, в корень диска, тупо в каждую папку делфи... результата ноль ![]() ![]() |
Автор: Snowy 28.2.2005, 16:27 | ||
А ошибка все та же выскакивает? Мне просто не на чем проверить https. Если что наковыряю, то расскажу. Инет полон вопросов, но нет ответов. Вот в закромах гугеля нашел дохлую страничку. Попробуй такой код:
|
Автор: _hunter 28.2.2005, 16:38 |
нет. кидать нужно именно в папку программы ( сам раз напоролся ) + инди очень чувствителен к этим либам ( точно такие же от OpenSSL не подошли ) попробуй http://www.i.com.ua/~hunter_/ssl.rar качнуть а с самим SSL' ем косяков вроде не было ( разве что InterceptEnabled установи ) |
Автор: PROme 28.2.2005, 16:46 |
урря!!! всем огромное спасибо ![]() _hunter - отдельное ![]() конечно же и в папку с проектом кидал длл-ки... а вот твои качнул и сразу запахало ![]() |
Автор: _hunter 28.2.2005, 16:48 |
всегда пожалуйста ![]() |
Автор: Snowy 28.2.2005, 16:50 |
Видимо версия дельфи не подошла. Я тут раскопал несколько констант, которые нужно добавить в старые версии дельфи, потому что они там почему-то закоментированы. Может дело в них было. Но это уже не важно. Кстати, скажи хоть к какой версии Indy подошли эти dll-ки. А то официальный форум закрыт, так может пригодится для потомков. ![]() |
Автор: PROme 28.2.2005, 17:20 |
Snowy вопрос на засыпку? ![]() понятия не имею ![]() ну я смотрю вы тут отдохнули уже немного? я тоже перекусил, ну что ж, продолжаем? ![]() все круто, работает по https но вообще все это дело делается для работа под base-64 (или как там ее?) авторизацию в общем в разделе Request компонента idHTTP ставлю BasicAuthentification в true, прописываю пароль и юзер нейм, при попытке авторизации получаю - http://docs.com.ru/add/pic/err2.png (6кб) у кого какие мысли? че-то мне кажется что что-то совсем не то ![]() |
Автор: _hunter 28.2.2005, 17:24 |
а что это за авторизация такая? + попробуй версию в 1.0 поставить |
Автор: PROme 28.2.2005, 18:22 | ||
ну, например, как тут: http://top100.rambler.ru/cgi-top100/stats.cgi все, проблему решил... странно, однако, почему-то не хочет работать Post... зато Get работает и за себя и за Post ![]() |
Автор: _hunter 28.2.2005, 18:27 |
не понял чем она от обычной отличается ( ну да ладно ) а то, что пост работать не хочет -- вполне нормально ( скрипт данные по методу GET ожидает ) |
Автор: PROme 28.2.2005, 19:06 | ||||
да причем тут это? во-первых, это не тот скрипт во-вторых, тот какраз по Post и читает в-третьих, даже если и не прочитал - идет просто сообщение ауторизэшт рекюред, а не недопустимый метод...
тем что идет через .хтацес там прошисываешь, изменяется заголовок и все нормальные браузеры выдают свои формы... а обычная - просто инпуты в хтмл форме - скрипт принимает параметры и т.д. ну более самодельная ![]() |
Автор: _hunter 28.2.2005, 19:10 |
если ТОТ по POST работает до него данные доходить не должны тогда она называется не base-64 ![]() |
Автор: PROme 28.2.2005, 20:46 |
что такое ТОТ? ну вообщем я ничего не знаю... главное что работает ![]() еще раз всем спасибо ![]() |
Автор: Strannic 14.9.2005, 17:27 |
Доброе время суток. Возникла почти такая же задача: post на некий сайт и получения ответа. Тоже начал делать на Indy, с ходу задача не поддалась, перерыл пол инета, вопросов много ответов почти нет. Вот нашел в вашей ветке ответы которые помогли человек запустить желаемое. Только я не понял в чем трабла в этом случае у меня - все время говорит "Ошибка соединения SSL" сделал следующее: кинул на форму IdHTTP и IdSSLIOHandlerSocket прописал IdHTTP.IOHandler := IdSSLIOHandlerSocket IdHTTP.Port := 443 после пытаюсь вызвать код Memo1.Text := IdHTTP.Post('https://xxx.ru/dir', S); где в S пересылаю данные. в ответ - ошибка. Подскажите, плиз. |
Автор: _hunter 14.9.2005, 17:36 |
что за ошибка? + ты уверен что на том конце поддерживают ссл? |
Автор: Snowy 14.9.2005, 17:39 |
Почитай вот этот топик: http://forum.vingrad.ru/index.php?showtopic=63257&view=all В самом конце итоговый код для GET запроса. Сделай все то же самое, только с POST. Заодно почитай по ходу решения вопроса, с какими проблемами можно столкнуться. |
Автор: Strannic 14.9.2005, 18:22 |
"Ошибка соединения с SSL" на том конце именно ssl. по специфкации их протокола (того конца) мне необходимо так же передавать следующую инфу: это я прописываю в соответствующие свойства IdHttp Content-type: text/plain; charset=Windows-1251 Content-length: 73 - насколько я полян это длина того что я отсылаю а из этого я делаю CustomHeaders X-Eport-Point: 123 X-Eport-Auth: password X-Eport-Password: 1234567890 после чего создаю TStrings с данными "CANCEL point=123456 id=123 checkid=123 value=3.0000QTY account=9165556677" и вызываю IdHTTP1.Post('https://xxx.ru/dir', StringsData); но тут же получаю вышеупомянутую ошибку. самих паролей в этом соединении нет только их пароли авторизации которые у меня в CustomHeaders спасибо за еще одну ссылку, насколько я понял то у меня отличия в том, что я не создаю вс это в динамике, а просто накидал компонент на форму. но мне кажеться дело не в этом. P.S.: а все казалось таким бональным и простым. ![]() |
Автор: Strannic 14.9.2005, 18:38 |
правда я использую dll не indy_openssl096k.zip а indy_OpenSSL096m.zip и после переделки на динамическое создания как и ожидал ничего не изменилось. пробывал так же и Get но результат один и тот же - "Ошибка соединения с SSL" может кто знает какой-нить другой сайт с https? дабы проверить что сама идея работает и эта проблема сугубо с моим. |
Автор: Strannic 15.9.2005, 13:53 |
Т.к. в итоге ничего не заработало решил искать альтернативные пути. Если кто сталкнется с похожей проблемой - посмотрите в сторону http://www.badfan.com/delphi/tie_http_https.html причем ему не требуеться никаких DLL и очень прост в использовании. |
Автор: Snowy 15.9.2005, 14:23 |
Ну и как альтернативные пути? Помогло? Тебе просто нужно было посмотреть, что у тебя в сеть идет. Может где-то чего-то недостает или наоборот дублируется. |
Автор: Strannic 15.9.2005, 15:24 |
Альтернатива заработала на ура. Быстро и без таскания за собой всяких там DLL. Причем выглядело это так - бросил один компонент на форму. Прописал ему два свойства. Запустил. Получил данные. Все. Слыхал я про нарекания на Indy, но не думал, что все так несерьезно у них. К примеру та же почта на русском языке у них не ходит не смотря на мои ковыряния в их исходниках. ![]() |
Автор: Snowy 15.9.2005, 15:36 | ||||||
Зато сумели стать стандартом. А вообще альтернативных вариантом множество. Например ICS.
Его не выкинули, они просто стали платными. Из Дельфи убран, чтобы не повышать и без того немалую стоимость пакета. Кому нужен FastNet - покупайте ради бога...
Поздравляю. Как-нить на досуге поковыряю. Посмотрю, что за зверь. |
Автор: Том 28.2.2006, 11:21 |
_hunter, ссылка на библиотеки не работает ![]() Дай, пожалуйста, другую, или скажи как еще их найти! |
Автор: Snowy 28.2.2006, 11:26 |
http://www.intelicom.si/domcms.nsf/b22359a69e6184e185256d07000a3de0/8a3b424f424132d088256f4c0072c460/$FILE/indy_openssl096k.zip http://forum.vingrad.ru/index.php?showtopic=63257&view=all |
Автор: Том 28.2.2006, 11:33 |
Прям не знаю в чм проблема, но не работает! Вс таже ошибка ("could not load SSL library")! !Копирую в папку с программой, в систем32 и тд, короче все то же, что и было уже! |
Автор: _hunter 28.2.2006, 12:11 |
попробуй эту: http://www.intelicom.si/www.nsf/2434100e396ad3f3c125705100369374/d6b8e150fe453facc1257082006fc8b9/$FILE/indy_openssl096g.zip версию |
Автор: Том 1.3.2006, 10:26 |
Ребят, а вот в свойстве IdConnectionInterceptOpenSSL1->KeyFile необходимо указывать файл, с помощью которого создается ключ как я понял, в Delphi наверно (IdSSLIOHandlerSocket.KeyFile). Но как его создать? Я загрузил какой-то, а при Post'е выдается ошибка "Could not load key, check password". Как бы его создать правильно? Подскажите! ![]() |
Автор: Snowy 1.3.2006, 10:29 |
Если ты сервер пишешь, то у тебя должен быть свой keyfile. Если клиента, то ничего туда грузить не нужно - ключ даст тебе сервер. |
Автор: Том 1.3.2006, 10:50 |
ОК! Спасибо, теперь разобрался! Кстати пришлось сменить метод с sslvSSLv2 на sslvTLSv1 и все заработало! ![]() |
Автор: N1k 1.3.2006, 10:52 |
Когда-то столкнулся с такой же проблемой, нужно было получать данные по HTTPs. Хотел заюзать Indy с ее openssl. А потом подумал, если винда это делает, то значит у нее это все есть. С тех пор для ssl юзаю WinImet. Ни каких сторонних библиотек таскать за собой не нужно.Примеров достаточно, например, упоминавшийся здесь TIEHTTP а также EasyNet(там вообще все супер, использование WinInet на полную силу). зы: кстати, никогда, ни в одном проекте, не использовал Indy(ну не нравится мне эти компоненты).Если что-то нужно пишу для себя сам. |
Автор: Snowy 1.3.2006, 11:10 |
N1k, на вкус и цвет. У WinInet тоже есть свои противопоказания. Не факт. Только, если IE настроен. А если нет... У меня опера. IE не настроен... IE вообще может быть вырезан из системы. |
Автор: Том 9.3.2006, 10:30 |
Ребят, а я столкнулся вот еще с одной проблемой! Пытаюсь передать запрос методом post со следующими параметрами: url = "/cp/fe" host = "dealer.e-port.ru" port = 443 Подключил SSL. Сертификат есть. при попытке передать запрос выдаётся ошибка: "Error connecting with SSL" По url например "https://dealer.e-port.ru/cp/oem" всё работает! Пытаюсь передать запрос по url "https://dealer.e-port.ru/cp/fe", и получаю ошибку "412 Precondition Failed"! Помогите кто-нибудь! ![]() |
Автор: _hunter 9.3.2006, 11:42 |
что ты пытаешся передать? как запрос выглядит? + возьми любой сниффер и посмотри как это делает любой браузер -- сразу поймеш что не так делаеш... |
Автор: Том 9.3.2006, 11:50 | ||
Вот пример:
Да дело то по-моему не в запросе, а в формате адреса! Указать его наверно нужно как то по другому! Запрос на "https://dealer.e-port.ru/cp/oem" то работает! А вот на хост dealer.e-port.ru, урл "/cp/fe" нет! Вот беда, не пойму почему! |
Автор: _hunter 9.3.2006, 11:54 |
если ты привел текст запроса -- он абсолютно не правильный... |
Автор: Том 9.3.2006, 12:01 | ||
Так дело то не в нём! Хотя ошибки быть не должно, это стандартный запрос! Вот пример в XML:
Но дело в коннекте, так как пост на урл "https://dealer.e-port.ru/cp/oem" обрабатывается!!! а на хост "dealer.e-port.ru", урл "/cp/fe" нет! Дело не в самом запросе, а в формате адреса или параметрах подключения, что я и не могу понять! |
Автор: _hunter 9.3.2006, 13:11 |
а XML тут зачем? + какой он стандартный, если метод не указан? ты, похоже, под запросом что-то не то понимаеш. ++ в любом случае поставь сниффер. |
Автор: Strannic 24.8.2006, 10:04 | ||||||
Тут про e-port был вопрос. Вот ответ. К приеру для получения курса валют достаточно выполнить:
а для отправки данных
компонетна выглядит следующим образом
Вот в принципе и все. Пользуйтесь на здоровье. ![]() |
Автор: ChaserHA 16.11.2006, 11:34 |
Кто-нибудь работал с MoneyMail или с E-Gold по HTTPS? Что-то не получается получить оттуда данные (например запросу текущего по балланса с MoneyMail или проверка балланса на E-Gold). Если у кого есть примеры работы с системами, прошу ответить, очень срочно требуется, ибо у меня что-то никак не выходит, хотя по идее делаю все правильно. |
Автор: familiar 13.6.2007, 22:02 |
Народ, помогите ламеру ![]() </SCRIPT> <FONT color=#ff0000></FONT> <TABLE border=0> <TBODY> <TR> <TD vAlign=top align=left width=685> <DIV align=left><STRONG>Поиск абонента</STRONG></DIV> <FORM name=searchForm action=/searchDealer.do method=post> <P><EM><FONT color=#000099>Параметр поиска:</FONT></EM> <INPUT name=parameter></P> <P><EM><FONT color=#000099>Тип параметра</FONT></EM> <INPUT type=radio CHECKED value=1 name=parameterType>Телефон</P><INPUT type=submit value="Найти контракт"> </FORM> <script language=JavaScript type=text/javascript> <!-- var focusControl = document.forms["searchForm"].elements["parameter"]; if (focusControl.type != "hidden" && !focusControl.disabled) { focusControl.focus(); } // --> </SCRIPT> ![]() С МЕНЯ ПИВО!!!! |
Автор: Sanchezzz 14.6.2007, 22:37 |
пиши в асю кажется я знаю как это реализовать.... 368619020 |
Автор: s_arty 20.11.2007, 13:16 |
Народ, помогите, пожалуйста, кто-нибудь работал с Метатрейдером 4 от MetaQuotes по HTTPS ? А то как-то совсем надоело использовать их внутренний мега_Си_подобный язык... ![]() Может у кого есть исходники иль на худой конец описание протокола ![]() |
Автор: Aly 24.1.2008, 15:07 |
Всем доброго времени суток ![]() Все про соединение по htpps было понятно на Delphi 7, но при переносе на Delphi 2007 при первом соединении выкидывает ошибку exception class EIReadTimeout whith message 'Read Timeout'. А дальше работает гладко. Фактически отпраляется 2 запроса на сервер (проверено), но ответ получается только на 2ой. Хелп, плиз ![]() |
Автор: Snowy 24.1.2008, 15:23 |
Aly, я тебе точно могу сказать - у тебя в программе что-то не так. Чтобы работало правильно, нужно это исправить и будет работать нормально. |
Автор: MetalFan 24.1.2008, 15:27 |
ну и? ReadTimeout. увеличь и будет тебе счастье |
Автор: Aly 24.1.2008, 15:27 |
procedure TForm1.Button1Click(Sender: TObject); var Stream: TMemoryStream; begin Stream:= TMemoryStream.Create; url:=url0+'USERNAME='+login+'&&PASSWORD='+pass+'&&ACT='+act; IdHTTP.Get(URL,Stream); Stream.SaveToFile(fname); Stream.Free; Если не сложно ткните носом, плиз Добавлено @ 15:28 Таймаут на 1000000 тоже мало ![]() |
Автор: Aly 7.2.2008, 12:35 |
Помогите чайнику, как сделать чтобы если сервер к которому общаешься недоступен в данный момент отложить на какое-то время соединение. Pleace! |
Автор: alexnov 17.3.2008, 15:09 |
Всем Привет! Пишу прогу проверки баланса на https://onyma.radnet.ru. Нужно туда ввести имя и пароль и получить скока денег осталось. Начал писать в Делфи на indy + openssl. Пишу такое в первый раз, поэтому помогите плиз! Очень интересно, но знаний кое-каких нехватает. Поставил на форму IdHTTP, порт 443, IdSSLIOHandlerSocket1, sslvTLSv1. procedure TForm1.Button1Click(Sender: TObject); var lData: TStringList; HTTP: TIdHttp; s: string; i:integer; begin lData := TStringList.Create; try lData.Add('LOGIN=***'); lData.Add('PASSWD=***'); s:=IdHTTP1.Post('https://onyma.radnet.ru/', lData); / /***** finally lData.Free; end; memo1.Clear; http:=TIdHTTP.Create(nil); try s:=http.Get('https://onyma.radnet.ru/'); except ShowMessage('No connect with server.'); Exit; end; memo1.Lines.Add(s); http.Free; Прога выдает No connect with server. В чем тут дело? Мне надо получить страничку ту которая появляется после ввода логина и пароля. Добавлено через 3 минуты и 16 секунд Всем Привет! Пишу прогу проверки баланса на https://onyma.radnet.ru. Нужно туда ввести имя и пароль и получить скока денег осталось. Начал писать в Делфи на indy + openssl. Пишу такое в первый раз, поэтому помогите плиз! Очень интересно, но знаний кое-каких нехватает. Поставил на форму IdHTTP, порт 443, IdSSLIOHandlerSocket1, sslvTLSv1. procedure TForm1.Button1Click(Sender: TObject); var lData: TStringList; HTTP: TIdHttp; s: string; i:integer; begin lData := TStringList.Create; try lData.Add('LOGIN=novikov'); lData.Add('PASSWD=77605'); s:=IdHTTP1.Post('https://onyma.radnet.ru/', lData); / /***** finally lData.Free; end; memo1.Clear; http:=TIdHTTP.Create(nil); try s:=http.Get('https://onyma.radnet.ru/'); except ShowMessage('No c |