Перейти к содержанию
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С. Так ли это? Как пройти эту авторизацию? Очень прошу вашей помощи. С уважением, разраб-любитель
×
×
  • Создать...