-
Может посоветуете что? Задача - залогиниться на сайт по https. Запрос уходит, а возвращается эта же страница, т.е. логина не происходит. Все dll есть и все что можно вроде бы добавлено и проверено :( Или мне нужно установить сертификат с этого сайта? Сайты пробовал разные, поведение одинаковое.
Вот такой код есть:
HTTP := TidHTTP.Create(nil); HTTP.AllowCookies := true; HTTP.HandleRedirects := true; HTTP.Intercept := Form1.IdLogFile1; FUseSLL := true; if FUseSLL then begin SSLIO := TIdSSLIOHandlerSocketOpenSSL.Create(HTTP); HTTP.IOHandler := SSLIO; SSLIO.SSLOptions.Method := sslvSSLv3; HTTP.Request.BasicAuthentication := true; HTTP.ReadTimeout := 40000; end; Params := TStringList.Create;
Params.Clear; Params.Add(GetLoginParam('Username') + '=' + GetLogin); Params.Add(GetLoginParam('Password') + '=' + GetPassword); HTML := HTTP.Post(GetLoginParam('PostURL'), Params);
Поля, их значения и URL возвращаются функциями корректно. Для проверки кода можно использовать:
Params.Add(GetLoginParam('login=delphikingdom'); Params.Add(GetLoginParam('password=delphi'); HTML := HTTP.Post('https://www.fotolia.com/Member/Login', Params);
-
> Или мне нужно установить сертификат с этого сайта?
именно
-
интересно куда его надо установить, если ссл не работает с виндовыми хранилищами сертификатов .....
-
на диск :)
-
вообще рекомендую выбросить indy и работать с WinInet
-
Итак, я могу забрать с сайта сертификат *.crt, что мне с ним делать дальше. Indy же нужен pem, правильно я понимаю? Можно алгоритм действий?
2Palladin можно пример на WinInet? Я не очень с этим делом знаком.
-
> можно пример на WinInet?
пример чего конкретно?
-
Итак, я могу забрать с сайта сертификат *.crt,
сертификат сам прилетает с сайта в ответе на гет или пост клиента. твоя задача - сказать в обработчике клиента, принимаешь ты его или нет. сам сертификат никуда пихать не надо.
-
2Palladin
Пример обращения к сайту с использованием SSL в самом простейшем случае. Хочется уяснить как обращаться с сертификатами на клиенте.
2 Медвежонок Пятачок
Где именно нужно этот сертификат отловить? В заголовках про него ничего нет. Нужно ли как-то по-особенному его запрашивать? Если есть пример как это сделать средствами Indy, было бы здорово посмотреть. Могу выложить лог, который дает TIdLogFile
-
не надо никого ловить. Пиши обработчик OnverifyPeer и возвращай из него True
-
hInet:=InternetOpen('WRWinInet',INTERNET_OPEN_TYPE_PRECONFIG,Nil,Nil,0);
hConn:=InternetConnect(hInet,PChar(p_strHost),INTERNET_DEFAULT_HTTPS_PORT,Nil,Ni l,INTERNET_SERVICE_HTTP,0,1);
hReq:=HttpOpenRequest(hConn,'POST',PChar(p_strDoc),Nil,Nil,Nil,INTERNET_FLAG_SEC URE or INTERNET_FLAG_IGNORE_CERT_CN_INVALID or INTERNET_FLAG_KEEP_CONNECTION,1);
HttpSendRequest(hReq,PChar(strHdrs),Length(strHdrs),PChar(p_strData),Length(p_st rData))
-
Обработчик написал, работает как и прежде :( В остальных обработчиках надо что-то писать?
-
Palladin, спасибо
-
SSLOptions.VerifyMode на что-то влияет в данном случае? у меня там пусто сейчас.
|