Как Предотвратить диалоговое окно (Подсказка стандартной аутентификации) во время вызова Веб-сервиса

В программе Дельфи (работающий как услуга) я должен назвать некоторые веб-сервисы.
Вызовы хорошо работают, если стандартная аутентификация не является requerired. Вызовы также хорошо работают, если Стандартная аутентификация является requerired, и имя пользователя введено (в BeforePost) использование:

InternetSetOption(Data, INTERNET_OPTION_USERNAME,...
InternetSetOption(Data, INTERNET_OPTION_PASSWORD,...

Но если Стандартная аутентификация Повторно запрашивается, и имя пользователя не введено, программа поднимает подсказку AF для имени пользователя/пароля (thats ОСТАНОВКА в servcice).

Таким образом, как я могу предупредить, что не хочу подсказку, но вместо этого ошибку?

Проблема, поскольку я могу se, это, в SOAPHTTPTrans функционирует THTTPReqResp. Отправьте (константа ASrc: TStream): Целое число; (строка 762 (второй вызов к InternetErrorDlg i тот метод)).

EDIT1:
если я изменяю Флаги в начале отправить метода (в SOAPHTTPTRANS) для включения INTERNET_FLAG_NO_AUTH, он работает, как я хотел.
Но как я делаю это, не изменяя SAOPHTTPTrans (если возможный)?

EDIT2:

ws := THTTPRIO.Create(Self);
ws.URL := 'http://excample.com/ws.asmx';
ws.HTTPWebNode.InvokeOptions := [soIgnoreInvalidCerts];
ws.HTTPWebNode.OnBeforePost := WebServiceCallBeforePost;
AvailabilityWebservice := (ws as AvailabilityServiceSoap);
sTemp := AvailabilityWebservice.GetVersion;

То, где AvailabilityServiceSoap является интерфейсом, генерировало использование средства импорта WSDL.

6
задан Warren P 18 November 2011 в 16:52
поделиться

3 ответа

Вы можете создать новый класс, который наследуется от THTTPReqResp и переопределить метод send так, чтобы вы могли включать свои собственные флаги. Вы должны быть в состоянии установить ws.HTTPWebNode на новый узел, используя новый класс.

Something Like

ws := THTTPRIO.Create(Self);
MyNewNode := MyNewClass.Create;
ws.HTTPWebNode := MyNewNode;
ws.URL := 'http://excample.com/ws.asmx';
ws.HTTPWebNode.InvokeOptions := [soIgnoreInvalidCerts];
ws.HTTPWebNode.OnBeforePost := WebServiceCallBeforePost;
AvailabilityWebservice := (ws as AvailabilityServiceSoap);
sTemp := AvailabilityWebservice.GetVersion;
1
ответ дан 17 December 2019 в 07:03
поделиться

У меня возникла проблема при попытке разрешить Windows Live Мессенджер работает через веб-фильтр.

Я закончил тем, что написал небольшую программу , которая время от времени выполняет автоматическую аутентификацию.

Надеюсь, это вам тоже поможет.

uses
  ... IdHTTP ...;

...
var
  httpGetter: TIdHTTP;
...    
httpGetter.Request.Username := username;
httpGetter.Request.Password := password;
httpGetter.HandleRedirects := True;
httpGetter.Request.BasicAuthentication := True;

//custom useragent required to let live messenger work
//this part is probably not necessary for your situation
httpGetter.Request.UserAgent := 'MSN Explorer/9.0 (MSN 8.0; TmstmpExt)';

httpGetter.Get(url,MS);
...
2
ответ дан 17 December 2019 в 07:03
поделиться

Как насчет того, чтобы сначала проверить режим аутентификации серверов?

http://en.wikipedia.org/wiki/Basic_access_authentication

  • Клиент запрашивает страницу, которая требует аутентификации, но не предоставляет имя пользователя и пароль. Обычно это происходит потому, что пользователь просто ввел адрес или {{ 1}} перешел по ссылке на страницу.
  • Сервер отвечает кодом ответа 401 и предоставляет область аутентификации .

Таким образом, приложение клиентской службы может отправить Get и посмотреть, есть ли в ответе заголовок типа

WW-Authenticate: Basic realm="Secure Area"
1
ответ дан 17 December 2019 в 07:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: