| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 |