Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4] 5 6 7   вперед  Ctrl      все
 Re: Получение данных через http протокол  [new]
человек_ниоткуда
Guest
Трость
У меня получилось вот что:

-- пропущено
EXEC @hr = master.dbo.sp_OACreate 'MSXML2.XMLHTTP', @xml OUTPUT
-- пропущено


Если файл маленький, то отрабатывает на отлично, если большой (у меня чуть более 6 мегабайт), то responsebody = null,
хотя Content-Length показывает правильный размер файла

Помогите разобраться

Вот пример с использованием правильных компонентов:
	$WC = New-Object Net.WebClient;
	$WC.Headers.Add('Request-Timeout', 60*60*1000 );
	$aBuff = $WC.DownloadData('http://www.fms.gov.ru/upload/expired-passports/list_of_expired_passports.csv.bz2');

Перепиши на .Net этот код, сделай Dll и подключи к MS SQL через "CREATE ACCEMBLY". Когда у тебя база задедосит WEB сервер, перепишеш на использование SERVICE BROKER; а когда CLR сожрёт всю оперативу перенесёшь на отдельный сервак.

А ПРО MSXML2.XMLHTTP и sp_OACreate ЗАБУДЬ!

PS: Glory тебе правильно говорит.
10 сен 15, 10:08    [18131293]     Ответить | Цитировать Сообщить модератору
 Re: Получение данных через http протокол  [new]
Yuri Abele
Member

Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe
Сообщений: 1661
человек_ниоткуда
Перепиши на .Net этот код, сделай Dll и подключи к MS SQL через "CREATE ACCEMBLY". Когда у тебя база задедосит WEB сервер, перепишеш на использование SERVICE BROKER; а когда CLR сожрёт всю оперативу перенесёшь на отдельный сервак.

И сделаешь визуально в SSIS :-)
10 сен 15, 10:14    [18131329]     Ответить | Цитировать Сообщить модератору
 Re: Получение данных через http протокол  [new]
человек_ниоткуда
Guest
Yuri Abele
человек_ниоткуда
Перепиши на .Net этот код, сделай Dll и подключи к MS SQL через "CREATE ACCEMBLY". Когда у тебя база задедосит WEB сервер, перепишеш на использование SERVICE BROKER; а когда CLR сожрёт всю оперативу перенесёшь на отдельный сервак.

И сделаешь визуально в SSIS :-)

Да пусть хоть на скрижалях гетинаксовых вытравливает, главное чтоб не использовал MSXML2.XMLHTTP через IDispath. :)
10 сен 15, 10:23    [18131377]     Ответить | Цитировать Сообщить модератору
 Re: Получение данных через http протокол  [new]
Трость
Guest
Glory,
т.к. с этим дело не имел, искал готовые примеры, как это всё может работать через T-SQL.

Вы предлагаете посмотреть рабочий пример, но какой?!

У меня вопрос:
- почему маленькие файлы закачивает в базу, большие файлы нет (responsebody = null)?
- какие корректировки необходимо внести в данный пример, чтобы можно было закачивать в базу большие файлы?
10 сен 15, 10:24    [18131379]     Ответить | Цитировать Сообщить модератору
 Re: Получение данных через http протокол  [new]
Glory
Member

Откуда:
Сообщений: 104751
Трость
Вы предлагаете посмотреть рабочий пример, но какой?!

Рабочий пример - это такой пример, который работает

Трость
У меня вопрос:
- почему маленькие файлы закачивает в базу, большие файлы нет (responsebody = null)?

А вот это вам предстоит выяснить самостоятельно. Для этого вам всего лишь предстоит отследить все, что происходит при вызове каждой из команд. И не только в базе, то и по все цепочке вниз - оп.система, сеть, удаленный сайт и тд

Трость
- какие корректировки необходимо внести в данный пример, чтобы можно было закачивать в базу большие файлы?

Спросите Jovanny. У меня слишком устаревшие взгляды на роль СУБД. А он может все реализовать на уровне базы
10 сен 15, 10:30    [18131415]     Ответить | Цитировать Сообщить модератору
 Re: Получение данных через http протокол  [new]
Трость
Guest
Glory,

Спасибо!

К теме о цепочке.
Файл закачивается, уже отследил. Если исключить максимальный размер 8000 в байтах (в других топиках встречал такое упоминание), то скорей всего дело в свойстве компонента, который используется.


Jovanny, что можете посоветовать?
10 сен 15, 10:59    [18131575]     Ответить | Цитировать Сообщить модератору
 Re: Получение данных через http протокол  [new]
Glory
Member

Откуда:
Сообщений: 104751
SET TEXTSIZE 2147483647
10 сен 15, 11:12    [18131631]     Ответить | Цитировать Сообщить модератору
 Re: Получение данных через http протокол  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
Упоминается ограничение в 8000 символов в инете, но в MSDN ничего такого нет.
https://social.msdn.microsoft.com/Forums/sqlserver/en-US/3b7b429f-d1c2-4800-86b9-ab1a865a6a5d/spoagetproperty-responsexml-limits?forum=sqlxml
http://www.sqlservercentral.com/Forums/Topic1141571-392-1.aspx

Я бы выбрал SSIS или CLR. Как-то посовременне будет.
10 сен 15, 12:40    [18132187]     Ответить | Цитировать Сообщить модератору
 Re: Получение данных через http протокол  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
А закачку файла через CLR обсуждали в топике, на который я ссылался в начале.
13027494
10 сен 15, 12:52    [18132279]     Ответить | Цитировать Сообщить модератору
 Re: Получение данных через http протокол  [new]
Трость
Guest
Glory
SET TEXTSIZE 2147483647


Спасибо.
Попробовал, не получается,
строчку вставлял и до создание объекта, до исполнения "responsebody", всё равно = null

Как правильно использовать "SET TEXTSIZE 2147483647"?
10 сен 15, 13:04    [18132352]     Ответить | Цитировать Сообщить модератору
 Re: Получение данных через http протокол  [new]
Трость
Guest
Уже всё перепробовал,
помогите разобраться почему приходит responsebody = null
через браузер качается без проблем.

Гляньте ещё раз на код, что может быть неправильным?

/*SET TEXTSIZE 0

SELECT @@TEXTSIZE 

SET TEXTSIZE 2147483647

SET TEXTSIZE 0

SELECT @@TEXTSIZE */
             
SET NOCOUNT ON

declare @url nvarchar(3890)
set @url = 'https://http.mnogosms.com:8001/send1'

SET NOCOUNT ON
DECLARE @xml int, @hr int

-- новый объект, который может тягать странички
--EXEC @hr = master.dbo.sp_OACreate 'Microsoft.XMLHTTP', @xml OUTPUT
--EXEC @hr = master.dbo.sp_OACreate 'IXMLHTTPRequest', @xml OUTPUT

--EXEC 	@hr = sp_OACreate 'MSXML2.ServerXMLHTTP.4.0', @xml OUT
EXEC 	@hr = master.dbo.sp_OACreate 'WinHttp.WinHttpRequest.5.1', @xml OUT
--EXEC 	@hr = sp_OACreate 'MSXML2.ServerXMLHttp', @xml OUT


-- EXEC @hr = master.dbo.sp_OACreate 'MSXML2.XMLHTTP', @xml OUTPUT


--EXEC @hr = sp_OAMethod @xml, 'setRequestHeader', NULL, 'Content-Type', 'application/x-www-form-urlencoded'


-- ну тут еще всякая ерунда
EXEC @hr = master.dbo.sp_OAMethod @xml, 'Open', NULL, 'GET', @url, 0
EXEC @hr = master.dbo.sp_OAMethod @xml, 'Send', NULL

-- Можно посмотреть размер и тип файла
EXEC @hr = master.dbo.sp_OAMethod @xml, 'getResponseHeader', null, 'Content-Length'
EXEC @hr = master.dbo.sp_OAMethod @xml, 'getResponseHeader', null, 'Content-Type'

--EXEC @hr = master.dbo.sp_OAMethod @xml, 'SendoADOStream.Mode', null, 0
--exec master.dbo.sp_OAGetProperty @xml, 'StatusText'--, @statusText out 
--exec master.dbo.sp_OAGetProperty @xml, 'Status'--, @status out 
 
-- вставляю в имеющуюся таблицу результат (содержимое страницы)
--DELETE FROM [test]
SET TEXTSIZE 2147483647
DECLARE	@Response TABLE ( Response image )
DECLARE	@Response2 TABLE ( Response nvarchar(max) )

insert @Response EXECUTE master.dbo.sp_OAGetProperty @xml, 'responsebody'
--insert @Response EXECUTE master.dbo.sp_OAGetProperty @xml, 'responsetext'
SELECT * FROM @Response

insert @Response2 EXECUTE master.dbo.sp_OAGetProperty @xml, 'responsetext'
select * from @Response2

--insert [test] ([txt]) EXECUTE master.dbo.sp_OAGetProperty @xml, 'responsebody'

/*DECLARE @T varbinary(MAX)
EXECUTE master.dbo.sp_OAGetProperty @xml, 'responsebody', @T OUTPUT
SELECT @T*/

--insert [test] ([txt]) EXECUTE master.dbo.sp_OAGetProperty @xml, 'responseStream'


-- дестрой конечно же 
EXEC @hr = master.dbo.sp_OADestroy @xml
10 сен 15, 14:24    [18132919]     Ответить | Цитировать Сообщить модератору
 Re: Получение данных через http протокол  [new]
Glory
Member

Откуда:
Сообщений: 104751
Трость
через браузер качается без проблем.

А как вы в браузере смогли выполнить этот скрипт ?
10 сен 15, 14:31    [18132973]     Ответить | Цитировать Сообщить модератору
 Re: Получение данных через http протокол  [new]
Yuri Abele
Member

Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe
Сообщений: 1661
Трость,

попробуй так:

EXEC @hr = sp_OAGetProperty @win, 'ResponseText', @Text OUT

где @Text NVARCHAR(MAX);
10 сен 15, 14:33    [18132983]     Ответить | Цитировать Сообщить модератору
 Re: Получение данных через http протокол  [new]
Yuri Abele
Member

Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe
Сообщений: 1661
Вообще стоит доку почитать:
https://technet.microsoft.com/en-us/library/aa238859(v=sql.80).aspx
10 сен 15, 14:35    [18133003]     Ответить | Цитировать Сообщить модератору
 Re: Получение данных через http протокол  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
ТС, у вас там случаем не требуется клиентский сертификат для вашего https: сервера?
10 сен 15, 14:37    [18133011]     Ответить | Цитировать Сообщить модератору
 Re: Получение данных через http протокол  [new]
Трость
Guest
Konst_One,

нет, с сертификатом полный порядок.
10 сен 15, 14:38    [18133029]     Ответить | Цитировать Сообщить модератору
 Re: Получение данных через http протокол  [new]
Glory
Member

Откуда:
Сообщений: 104751
Трость
нет, с сертификатом полный порядок.

Вот вы когда делаете такие заявления, вы на чем основываетесь ?
У вас где-то есть полный лог общения приведенного выше скрипта ?
10 сен 15, 14:43    [18133072]     Ответить | Цитировать Сообщить модератору
 Re: Получение данных через http протокол  [new]
Трость
Guest
Yuri Abele
Вообще стоит доку почитать:
https://technet.microsoft.com/en-us/library/aa238859(v=sql.80).aspx


Вы про это "When the property returns an array, if propertyvalue is specified, it is set to NULL."?
10 сен 15, 14:48    [18133102]     Ответить | Цитировать Сообщить модератору
 Re: Получение данных через http протокол  [new]
Yuri Abele
Member

Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe
Сообщений: 1661
Трость
Yuri Abele
Вообще стоит доку почитать:
https://technet.microsoft.com/en-us/library/aa238859(v=sql.80).aspx


Вы про это "When the property returns an array, if propertyvalue is specified, it is set to NULL."?

Я про sp_OAGetProperty @яьд, 'ResponseText', @Text OUT
10 сен 15, 14:49    [18133109]     Ответить | Цитировать Сообщить модератору
 Re: Получение данных через http протокол  [new]
Трость
Guest
Glory,

Вообще говоря админы проревели сертификат, всё ок. Но я тестировал, если сертификата нет, Content-Length = 0, если качать, где сертификат есть, то Content-Length - показывает правильный размер закаченного файла, но responsebody = null.

Тут есть закономерность, если файл 4 кило и меньше, файл закачивается корректно, как только он более 4 килобайт, хоть тресни, responsebody = null
10 сен 15, 14:53    [18133137]     Ответить | Цитировать Сообщить модератору
 Re: Получение данных через http протокол  [new]
Трость
Guest
Yuri Abele
Трость
пропущено...


Вы про это "When the property returns an array, if propertyvalue is specified, it is set to NULL."?

Я про sp_OAGetProperty @яьд, 'ResponseText', @Text OUT



Вообще-то у меня всё правильно
insert @Response EXECUTE master.dbo.sp_OAGetProperty @xml, 'responsebody'


куда тут OUT вставить???
10 сен 15, 14:54    [18133151]     Ответить | Цитировать Сообщить модератору
 Re: Получение данных через http протокол  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
вам уже написали , что ваш скрипт неправильный. вы его исправили?

insert @Response EXECUTE master.dbo.sp_OAGetProperty @xml, 'responsebody'
--insert @Response EXECUTE master.dbo.sp_OAGetProperty @xml, 'responsetext' 
SELECT * FROM @Response

insert @Response2 EXECUTE master.dbo.sp_OAGetProperty @xml, 'responsetext' 
select * from @Response2
10 сен 15, 14:56    [18133171]     Ответить | Цитировать Сообщить модератору
 Re: Получение данных через http протокол  [new]
Glory
Member

Откуда:
Сообщений: 104751
Трость
Вообще говоря админы проревели сертификат, всё ок. Но я тестировал, если сертификата нет,

Вы называете свои манипуляции мышкой в браузере называете "я тестировал" ?
Вы знакомы с понятием отладка/дебаггинг ?
10 сен 15, 14:57    [18133176]     Ответить | Цитировать Сообщить модератору
 Re: Получение данных через http протокол  [new]
Трость
Guest
Glory,

С сертификатом там полный порядок... что ещё можно проверить?
10 сен 15, 15:00    [18133196]     Ответить | Цитировать Сообщить модератору
 Re: Получение данных через http протокол  [new]
Yuri Abele
Member

Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe
Сообщений: 1661
Трость
insert @Response EXECUTE master.dbo.sp_OAGetProperty @xml, 'responsebody'

Я просто говорю, попробуйте такое, не поможет, значит не поможет - мы спорим уже дольше
EXECUTE master.dbo.sp_OAGetProperty @xml, 'responsebody', @response_text OUTPUT
10 сен 15, 15:01    [18133211]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4] 5 6 7   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить