-
Добрый день, знатоки. Помогите в решении следующего вопроса: Есть некий веб-сервис со своим АПИ. Была написана на Delphi7 и родном Indy программка для работы с этим сервисом. После обновления веб-сервера на той стороне, программка перестала коннектится по ССЛ с ошибкой Error connecting with SSL. Свежие библиотеки Indy9 не понимал, пришлось поставить Indy10. После этого появилась ошибка Bad Request. Установил XE3, накатил самый свежий Indy10_5478, подложил самые свежие библы для ССЛ. Все равно Bad Request.
-
Вот код для XE3 procedure TForm1.Button1Click(Sender: TObject); var FHTTP:TIdHTTP; SSL: TIdSSLIOHandlerSocketOpenSSL; HttpParams:TStringList; Response:TStringStream; ini:tIniFile; s:string; begin Button1.Enabled:=false; FHTTP:=TIdHTTP.Create(nil); SSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil); HttpParams:=TStringList.Create; Response:=TStringStream.Create(''); s:=ExtractFilePath(Application.ExeName)+'Phonet.ini'; ini:=tIniFile.Create(s); try FHTTP.Request.UserAgent:='Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0'; FHTTP.Request.ContentType:='application/json'; FHTTP.HTTPOptions := [hoKeepOrigProtocol,hoForceEncodeParams,hoNoProtocolErrorException,hoWantProtoco lErrorContent]; SSL.SSLOptions.Method:=sslvTLSv1; SSl.PassThrough:=false; FHTTP.IOHandler:=SSL; s:=ini.ReadString('Main','AuthorizateCommand',''); HttpParams.Add(s); s:=ini.ReadString('Main','URL',''); FHTTP.Post(s, HttpParams, Response); if FHttp.Response.ResponseCode<>200 then begin s:=IfThen(FHttp.Response.ResponseText<>'',FHttp.Response.ResponseText,''); if Response.DataString<>'' then s:=s+': '+Response.DataString; ShowMessage('Ошибка при авторизации:'+#10#13+s); end else ShowMessage('Авторизовано успешно:'+#10#13+ FHttp.Response.RawHeaders.Values['Set-Cookie']); finally ini.Free; Response.Free; HttpParams.Free; SSL.Free; FHTTP.Free; Button1.Enabled:=true; end; end;
Вот содежнимое ini файла [Main] URL= https://htp1.phonet.com.ua/rest/security/authorizeAuthorizateCommand={"domain":"htp129.phonet.com.ua", "apiKey":"2dH7Y7TROvzwurbCvj44RSQcy86gcFK4"}
-
-
-
Всем спасибо. Сам разобрался. При попытке запостить ContentType:='application/json' незлья в HTTPOptions включать hoForceEncodeParams, тк тогда все разделители в JSOn-данных конвертируются в невалидные для JSOn символы
|