Перейти к содержанию
Fire Monkey от А до Я

Борислав Артеменко

Пользователи
  • Постов

    2
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные Борислав Артеменко

  1. Сам спросил, сам ответил :)

        RIO.HTTPWebNode.UserName:='user';
        rio.HTTPWebNode.Password:='pass';

    работает, просто нужно было выше поднять в описании web сервиса.

    Получившийся код:

    var
      RIO: THTTPRIO;
    begin
      Result := nil;
      if (Addr = '') then
      begin
        if UseWSDL then
          Addr := defWSDL
        else
          Addr := defURL;
      end;
      if HTTPRIO = nil then
        RIO := THTTPRIO.Create(nil)
      else
        RIO := HTTPRIO;
      try
        RIO.HTTPWebNode.UserName:='user';
        rio.HTTPWebNode.Password:='pass';
        Result := (RIO as TestWebServicePortType);
        if UseWSDL then
        begin
          RIO.WSDLLocation := Addr;
          RIO.Service := defSvc;
          RIO.Port := defPrt;
        end else
          RIO.URL := Addr;
      finally
        if (Result = nil) and (HTTPRIO = nil) then
          RIO.Free;
      end;
    end;

     

  2. Господа, приветствую вас.

    Вопрос возник откуда не ждали.

    Суть:

    Есть база 1С(пустая конфа, создал специально для тестов) в которой написал web сервис с функцией генерации XML.

    web сервис опубликовал, все замечательно.

    В Delphi, через импорт wsdl - импортировал описание сервиса, все отлично отработало. На форму закинул memo и получил сгенерированную XML из 1С.

    procedure TForm1.Button2Click(Sender: TObject);
    var
      Fulltext: string;
      WS: TestWebServicePortType;
    begin
       ws:=GetTestWebServicePortType(false, Edit3.Text);
       Memo1.Lines.Clear;
       Memo1.Lines.Add(ws.CreateXML('parametr1', 'parametr2'));
    end;

    Но, тут пришло время добавить пользователей в базу 1С. Добавил, все хорошо. Через браузер открывается ссылка на wsdl, запрашивает логин\пароль и после ввода данных - благополучно открывается.

    В Delphi же теперь, при попытке получить данные - возникает ошибка "Unauthorized(401) -http://site/...1cws" что в принципе логично, потому как - никто данные для авторизации не передавал. И вот здесь начинается мой вопрос: как осуществить Basic Authorization для wsdl ?

    Перепробовал уже все что только нашел на просторах интернета

    Добавление 

    RIO.HTTPWebNode.PreemptiveAuthentication:=true;
    rio.HTTPWebNode.Password:='username';
    RIO.HTTPWebNode.UserName:='pass';

    в сгенерированный Unit web сервиса не работает, причем данные пробовал подсовывать как в открытом виде так и в base64, - эффекта не дало.

    Нашел пример реализации на компоненте THTTPClient и он оказался рабочим, вот только мне это не помогло, подумалось - если приложение авторизуется через один компонент то другому уже не потребуется авторизация но, нет  :(

    procedure TForm1.DoRequest(const url, username, password, filename: string);
    var
      http: THTTPClient;
      ss: TStringStream;
      base64: TBase64Encoding;
    begin
      http := THTTPClient.Create;
      ss := TStringStream.Create('', TEncoding.UTF8);
      base64 := TBase64Encoding.Create(0);
      try
        // option #1 - build in credential storage
        http.CredentialsStorage.AddCredential(
          TCredentialsStorage.TCredential.Create(
            TAuthTargetType.Server, '', url, username, password
        ));
        // option #2 - custom "Authorization"
        http.CustomHeaders['Authorization'] := 'Basic ' + base64.Encode(username + ':' + password);
    
       // http.ProxySettings.Create('127.0.0.1', 8888); // for fiddler
        http.Get(url, ss);
        Memo1.Lines.LoadFromStream(ss);
      //  ss.SaveToFile(filename);
      finally
        base64.Free;
        ss.Free;
        http.Free;
      end;
    end;

    Догадываюсь - что для счастья мне нужно как то задать CustomHeader для THTTPRIO в сгенерированном Unit-е web сервера по аналогии с THTTPClient.CustomHeaders['Authorization'] := 'Basic ' + base64.Encode(username + ':' + password); и посылать данные для авторизации перед каждым запросом в 1С. Так ли это? Как пройти эту авторизацию? Очень прошу вашей помощи. С уважением, разраб-любитель

×
×
  • Создать...