Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Установка опции для WinHttpRequest (OLE-процедуры)  [new]
Dafur
Member

Откуда:
Сообщений: 28
Доброе время суток!

Есть такая задача. Нужно на web-сервер скрипту методом POST передать данные. Используется протокол HTTPS. Нужно проигнорировать ошибки сертификата (недоверенный центр сертификации, несовпадение хоста с прописанном в сертификате и т.п.). Сделать это можно, установив опции WinHttpRequestOption_SslErrorIgnoreFlags соответствующие флаги. Подробнее в MSDN.
Пытаюсь сделать так:
declare @obj int, @ret  int, @text varchar(max), @url varchar(max)

select @url = 'https://host.ru/scrypt.aspx'

exec @ret = sp_OACreate 'WinHttp.WinHttpRequest.5.1', @obj out
IF @ret <> 0 exec sp_OAGetErrorInfo @obj

exec @ret = sp_OAMethod @obj, 'Open', NULL, 'POST', @url, 'false'
IF @ret <> 0 exec sp_OAGetErrorInfo @obj

exec @ret = sp_OASetProperty @obj, 'Option', 0x100
IF @ret <> 0 exec sp_OAGetErrorInfo @obj
Что-бы я не скармливал третьему параметру процедуры sp_OASetProperty - вылезает ошибка:
Error | Source | Description | HelpFile | HelpID
0x80020004 | NULL | NULL | NULL | 0

Как победить?
6 окт 11, 13:08    [11394167]     Ответить | Цитировать Сообщить модератору
 Re: Установка опции для WinHttpRequest (OLE-процедуры)  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
Dafur,
Имя свойства OLE-объекта, уверен что такое есть?

попробую угадать, вместо этого
exec @ret = sp_OASetProperty @obj, 'Option', 0x100

написать это
exec @ret = sp_OASetProperty @obj, 'VARIANT', 0x100
6 окт 11, 14:18    [11394822]     Ответить | Цитировать Сообщить модератору
 Re: Установка опции для WinHttpRequest (OLE-процедуры)  [new]
Dafur
Member

Откуда:
Сообщений: 28
trew
Dafur,
Имя свойства OLE-объекта, уверен что такое есть?

попробую угадать, вместо этого
exec @ret = sp_OASetProperty @obj, 'Option', 0x100

написать это
exec @ret = sp_OASetProperty @obj, 'VARIANT', 0x100

Уверен. Если написать что-нибудь другое, то ошибка такая:
Error | Source | Description | HelpFile | HelpID
0x80020006 | ODSOLE Extended Procedure | Неизвестное имя. | NULL | 0
6 окт 11, 14:27    [11394903]     Ответить | Цитировать Сообщить модератору
 Re: Установка опции для WinHttpRequest (OLE-процедуры)  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Велосиаед.

Если плясать отседова (ссылка по последнюю версию).
Тогда добавить строку (перед send):
		-- SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS = 0x100
		EXEC @ErrCode = sys.sp_OAMethod @OLEHTTP ,'setOption'		,NULL ,2		,0x100				IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'setRequestHeader'	GOTO HTTPError END

PS: Мои глаза!!!
Что случилось с BOL?!!!
7 окт 11, 17:03    [11403974]     Ответить | Цитировать Сообщить модератору
 Re: Установка опции для WinHttpRequest (OLE-процедуры)  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Чёрд
		-- SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS = 0x100
		EXEC @ErrCode = sys.sp_OAMethod @OLEHTTP ,'setOption'		,NULL ,2		,0x100				IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'setOption'		GOTO HTTPError END
7 окт 11, 17:04    [11403992]     Ответить | Цитировать Сообщить модератору
 Re: Установка опции для WinHttpRequest (OLE-процедуры)  [new]
Dafur
Member

Откуда:
Сообщений: 28
Mnior,
там используется MSXML2.ServerXMLHTTP, тогда как я использую WinHttp.WinHttpRequest. Ну и соответственно ошибка
Error | Source | Description | HelpFile | HelpID
0x80020006 | ODSOLE Extended Procedure | Неизвестное имя. | NULL | 0
7 окт 11, 17:19    [11404131]     Ответить | Цитировать Сообщить модератору
 Re: Установка опции для WinHttpRequest (OLE-процедуры)  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Dafur
там используется MSXML2.ServerXMLHTTP, тогда как я использую WinHttp.WinHttpRequest.
И?
Вам так припёрло WinHttp.WinHttpRequest?
7 окт 11, 19:08    [11404789]     Ответить | Цитировать Сообщить модератору
 Re: Установка опции для WinHttpRequest (OLE-процедуры)  [new]
Dafur
Member

Откуда:
Сообщений: 28
Mnior, спасибо.
Переписал с использованием MSXML2.ServerXMLHTTP:
declare @obj int, @ret  int, @text varchar(max), @url varchar(max)

select @url = 'https://host.ru/scrypt.aspx'

exec @ret = sp_OACreate 'MSXML2.ServerXMLHTTP', @obj out
IF @ret <> 0 exec sp_OAGetErrorInfo @obj

exec @ret = sp_OAMethod @obj, 'Open', null, 'POST', @url, 'false'
if @ret <> 0 exec sp_OAGetErrorInfo @obj

exec @ret = sp_OAMethod @obj, 'setRequestHeader', null, 'Content-Type', 'text/xml; charset=utf-8'
if @ret <> 0 exec sp_OAGetErrorInfo @obj

exec @ret = sp_OAMethod @obj, 'setOption', null, 2 ,13056
if @ret <> 0 exec sp_OAGetErrorInfo @obj

...
10 окт 11, 11:53    [11411467]     Ответить | Цитировать Сообщить модератору
 Re: Установка опции для WinHttpRequest (OLE-процедуры)  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Dafur
'setOption', NULL, 2, 13056
SXH_SERVER_CERT_IGNORE_UNKNOWN_CA	= 256	-- Unknown certificate authority
SXH_SERVER_CERT_IGNORE_WRONG_USAGE	= 512	-- Malformed certificate such as a certificate with no subject name
SXH_SERVER_CERT_IGNORE_CERT_CN_INVALID	= 4096	-- Mismatch between the visited hostname and the certificate name being used on the server
SXH_SERVER_CERT_IGNORE_CERT_DATE_INVALID= 8192	-- The date in the certificate is invalid or has expired
Понял.
10 окт 11, 15:14    [11413419]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Установка опции для WinHttpRequest (OLE-процедуры)  [new]
Аноним_Сергей
Guest
У меня для WinHttp.WinHttpRequest.5.1 сработал такой вариант:
exec @hr = sp_OASetProperty @object, 'Option', '13056', 4
18 ноя 15, 15:08    [18436016]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить