Конференция "Сети" » Bad Request при Post-запросе. W10,RAD XE3,Indy10
 
  • zsv (26.10.18 11:48) [0]
    Добрый день, знатоки.
    Помогите в решении следующего вопроса:
    Есть некий веб-сервис со своим АПИ. Была написана на Delphi7 и родном Indy программка для работы с этим сервисом.
    После обновления веб-сервера на той стороне, программка перестала коннектится по ССЛ с ошибкой Error connecting with SSL.
    Свежие библиотеки Indy9 не понимал, пришлось поставить Indy10. После этого появилась ошибка Bad Request. Установил XE3, накатил самый свежий Indy10_5478, подложил самые свежие библы для ССЛ. Все равно Bad Request.
  • zsv (26.10.18 11:50) [1]
    Вот код для 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/authorize
    AuthorizateCommand={"domain":"htp129.phonet.com.ua", "apiKey":"2dH7Y7TROvzwurbCvj44RSQcy86gcFK4"}
  • zsv (26.10.18 11:51) [2]
    сорри. урл в ини другой..
    URL=https://htp.phonet.com.ua/rest/security/authorize
  • zsv (26.10.18 11:55) [3]
    вот гоню.... вот правильное содержимое ини
    [Main]
    URL=https://htp.phonet.com.ua/rest/security/authorize
    AuthorizateCommand={"domain":"htp29.phonet.com.ua", "apiKey":"2dH7Y7TROvzwurbCvj44RSQcy86gcFK4"}
  • zsv (26.10.18 13:57) [4]
    Всем спасибо. Сам разобрался. При попытке запостить ContentType:='application/json' незлья в HTTPOptions включать hoForceEncodeParams, тк тогда все разделители в JSOn-данных конвертируются в невалидные для JSOn символы
 
Конференция "Сети" » Bad Request при Post-запросе. W10,RAD XE3,Indy10
Есть новые Нет новых   [118667   +39][b:0][p:0]