Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Метод GET и POST библиотеки Microsoft.XMLHTTP и MSXML2.ServerXMLHTTP и UTF-8  [new]
Soloxa
Member

Откуда:
Сообщений: 12
Используя метод POST и библиотеку MSXML2.ServerXMLHTTP
у меня получается отправить русский текст в смс на сервер.
но не могу прочитать ответ сервера ( не читабельный знак вопроса в ответе)


DECLARE @url varchar(300)  
	DECLARE @win int 
	DECLARE @hr  int 
	SET @url = 'http://alfa-sms.ru:8080/smw/aisms'
	
 declare @test nvarchar (1000)
 declare @bin as binary(8000)

	EXEC @hr=sp_OACreate 'MSXML2.ServerXMLHTTP',@win OUT 
	IF @hr <> 0 EXEC sp_OAGetErrorInfo @win 
	
	EXEC @hr=sp_OAMethod @win, 'Open',null,'POST',@url,0
	IF @hr <> 0 EXEC sp_OAGetErrorInfo @win 

 EXEC @hr=sp_OAMethod @win,N'setRequestHeader',NULL, 'Content-type', 'application/x-www-form-urlencoded; charset=UTF-8'
 	IF @hr <> 0 EXEC sp_OAGetErrorInfo @win

  EXEC @hr=sp_OAMethod @win,'Send',NULL,'user=??????&pass=??????&action=post_sms&message=Hello Дядя&target=???????'
	IF @hr <> 0 EXEC sp_OAGetErrorInfo @win 
		
	EXEC @hr=sp_OAGetProperty @win,'ResponseText', @test output
	IF @hr <> 0 EXEC sp_OAGetErrorInfo @win

	EXEC @hr=sp_OADestroy @win 
	IF @hr <> 0 EXEC sp_OAGetErrorInfo @win 
	select @test as ff
	select @bin as nc


Используя метод get и библиотеку Microsoft.XMLHTTP
не получается отправить смс с русским текстом ( вместо русских букв приходят знаки вопроса)
но нормально читается ответ сервера

DECLARE 
    @url nvarchar(800) = N'http://alfa-sms.ru:8080/smw/aisms?user=?????&pass=?????&action=post_sms&message=Hello Вася&target=7????????' 
  , @win int 
  , @test varchar (1000)

EXEC sp_OACreate 'Microsoft.XMLHTTP',@win OUT 
EXEC sp_OAMethod @win, 'Open',null,'GET',@url,0
EXEC sp_OAMethod @win,'Send'
EXEC sp_OAGetProperty @win,'ResponseText', @test output

select @test

EXEC sp_OADestroy @win 


при использовании метода SEND библиотеки Microsoft.XMLHTTP
не получается передать параметры SEND вываливается ошибка :
0x80070057 msxml3.dll Параметр задан неверно.

DECLARE 
    @url nvarchar(800) = N'http://alfa-sms.ru:8080/smw/aisms' 
  , @win int 
  , @test varchar (1000)
  , @send nvarchar = N'user=******&pass=*****&action=post_sms&message=Hello Зоя&target=*******'
  , @er int

EXEC sp_OACreate 'Microsoft.XMLHTTP',@win OUT 
EXEC sp_OAMethod @win, 'Open',null,'GET',@url,0
EXEC @er=sp_OAMethod @win,'Send',null,@send
IF @er <> 0 EXEC sp_OAGetErrorInfo @win

EXEC sp_OAGetProperty @win,'ResponseText', @test output

select @test

EXEC sp_OADestroy @win 
10 фев 13, 19:06    [13905073]     Ответить | Цитировать Сообщить модератору
 Re: Метод GET и POST библиотеки Microsoft.XMLHTTP и MSXML2.ServerXMLHTTP и UTF-8  [new]
Soloxa
Member

Откуда:
Сообщений: 12
Как решить проблему ?
11 фев 13, 14:57    [13909102]     Ответить | Цитировать Сообщить модератору
 Re: Метод GET и POST библиотеки Microsoft.XMLHTTP и MSXML2.ServerXMLHTTP и UTF-8  [new]
shalomb
Member

Откуда: Израиль
Сообщений: 92
Rabotai v Unicode u tebja @test varchar(100) zameni na nvarchar(100)
11 фев 13, 17:42    [13910281]     Ответить | Цитировать Сообщить модератору
 Re: Метод GET и POST библиотеки Microsoft.XMLHTTP и MSXML2.ServerXMLHTTP и UTF-8  [new]
Glory
Member

Откуда:
Сообщений: 104751
Soloxa
не получается отправить смс с русским текстом ( вместо русских букв приходят знаки вопроса)

SMS отправляет не сервер, а какая то служба на вашем alfa-sms.ru
Как вы проверили, что она делает с переданными ей данными ?

Кроме того в ваших скриптах все время почему то используются разные типы данных
Здесь
EXEC @hr=sp_OAMethod @win,'Send',NULL,'user=??????&pass=??????&action=post_sms&message=Hello Дядя&target=???????'
параметер varchar

А здесь
EXEC @er=sp_OAMethod @win,'Send',null,@send
уже nvarchar. Причем длиной в 1 символ согласно DECLARE @send nvarchar
11 фев 13, 17:48    [13910302]     Ответить | Цитировать Сообщить модератору
 Re: Метод GET и POST библиотеки Microsoft.XMLHTTP и MSXML2.ServerXMLHTTP и UTF-8  [new]
Soloxa
Member

Откуда:
Сообщений: 12
shalomb
Rabotai v Unicode u tebja @test varchar(100) zameni na nvarchar(100)

Как работать в юникоде ? я не знаю

@test varchar(1000) заменил na nvarchar(100) не помогло

ошибка 0x80070057 msxml3.dll Параметр задан неверно.
вываливается ранее

на строке
EXEC @er=sp_OAMethod @win,'Send',null,@send



если убрать @send

то скрипт внизу отрабатывает без ошибок
DECLARE 
    @url nvarchar(800) = N'http://alfa-sms.ru:8080/smw/aisms' 
  , @win int 
  , @test nvarchar (1000)
  , @send nvarchar (100)= N'user=******&pass=*****&action=post_sms&message=Hello Зоя&target=*******'
  , @er int

EXEC sp_OACreate 'Microsoft.XMLHTTP',@win OUT 
EXEC sp_OAMethod @win, 'Open',null,'POST',@url,0
EXEC @er=sp_OAMethod @win,'Send'
IF @er <> 0 EXEC sp_OAGetErrorInfo @win

EXEC sp_OAGetProperty @win,'ResponseText', @test output

select @test

EXEC sp_OADestroy @win 
11 фев 13, 21:11    [13911020]     Ответить | Цитировать Сообщить модератору
 Re: Метод GET и POST библиотеки Microsoft.XMLHTTP и MSXML2.ServerXMLHTTP и UTF-8  [new]
Soloxa
Member

Откуда:
Сообщений: 12
Glory
Soloxa
не получается отправить смс с русским текстом ( вместо русских букв приходят знаки вопроса)

SMS отправляет не сервер, а какая то служба на вашем alfa-sms.ru
Как вы проверили, что она делает с переданными ей данными ?

Кроме того в ваших скриптах все время почему то используются разные типы данных
Здесь
EXEC @hr=sp_OAMethod @win,'Send',NULL,'user=??????&pass=??????&action=post_sms&message=Hello Дядя&target=???????'
параметер varchar

А здесь
EXEC @er=sp_OAMethod @win,'Send',null,@send
уже nvarchar. Причем длиной в 1 символ согласно DECLARE @send nvarchar


alfa-sms это не мой сервер и я не могу знать что он делает с моими данными

вот пример скрипта на VBA который нормально отправляет русские буквы и нормально считывает Http.responseText

 Dim Http
    Http = CreateObject("Msxml2.XMLHTTP.4.0")

    Http.Open("POST", "http://alfa-sms.ru:8080/smw/aisms", False)

    Http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")
    Http.send("user=user11&pass=test1111&action=post_sms&message=Hello&target=+79999999999")

    MsgBox(Http.responseText, , "responseText")
11 фев 13, 21:24    [13911047]     Ответить | Цитировать Сообщить модератору
 Re: Метод GET и POST библиотеки Microsoft.XMLHTTP и MSXML2.ServerXMLHTTP и UTF-8  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3413
Soloxa,

EXEC @hr=sp_OACreate 'MSXML2.ServerXMLHTTP',@win OUT
и
Http = CreateObject("Msxml2.XMLHTTP.4.0")
- немного разные объекты. Уверены, что так и должно быть?
автор
если убрать @send

то скрипт внизу отрабатывает без ошибок
По-моему, вы убрали setContextHeader.
12 фев 13, 05:35    [13911687]     Ответить | Цитировать Сообщить модератору
 Re: Метод GET и POST библиотеки Microsoft.XMLHTTP и MSXML2.ServerXMLHTTP и UTF-8  [new]
Glory
Member

Откуда:
Сообщений: 104751
И еще
SQL Server stores Unicode data by using the UCS-2 encoding scheme, а не в UTF-8
12 фев 13, 10:13    [13912207]     Ответить | Цитировать Сообщить модератору
 Re: Метод GET и POST библиотеки Microsoft.XMLHTTP и MSXML2.ServerXMLHTTP и UTF-8  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3413
Glory,

Visual Basic тоже ничего не знает о UTF-8 и использует, по сути, тот же UCS-2. Соотв. преобразование может делаться только внутри объекта Msxml2.XMLHTTP.4.0 - больше просто негде.

Так что косяк явно в переносе кода с VB на T-SQL.
12 фев 13, 10:36    [13912336]     Ответить | Цитировать Сообщить модератору
 Re: Метод GET и POST библиотеки Microsoft.XMLHTTP и MSXML2.ServerXMLHTTP и UTF-8  [new]
Glory
Member

Откуда:
Сообщений: 104751
Ennor Tiegael
Visual Basic тоже ничего не знает о UTF-8 и использует, по сути, тот же UCS-2. Соотв. преобразование может делаться только внутри объекта Msxml2.XMLHTTP.4.0 - больше просто негде.

Т.е. в строке
Http.send("user=user11&pass=test1111&action=post_sms&message=Hello&target=+79999999999")
Visual Basic по-вашему использует именно Unicode и именно UCS-2 ?
И когда получает responseText тоже ?
12 фев 13, 10:43    [13912376]     Ответить | Цитировать Сообщить модератору
 Re: Метод GET и POST библиотеки Microsoft.XMLHTTP и MSXML2.ServerXMLHTTP и UTF-8  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3413
Glory,

Я не скажу за VB.NET, но в до-дотнетовскую эпоху Visual Basic был внутри построен полностью на юникоде. На том, в котором всегда строго 2 байта на символ, т.е. UCS-2, насколько я понимаю.

Когда ВБ-рантайм передает экземпляру объекта XMLHTTP данные, он это делает в UCS-2, поскольку больше ничего не знает. Но когда этот объект внутри себя конструирует тело запроса к серверу, он делает нужную конвертацию. На выходе - аналогично в обратную сторону. Снаружи этого, разумеется, не видно.
12 фев 13, 10:53    [13912447]     Ответить | Цитировать Сообщить модератору
 Re: Метод GET и POST библиотеки Microsoft.XMLHTTP и MSXML2.ServerXMLHTTP и UTF-8  [new]
Soloxa
Member

Откуда:
Сообщений: 12
В этом варианте ВОПРОС с РУССКИМИ БУКВАМИ РЕШЕН

не решен вопрос как получить читабельный ответ сервера

жду совета как вернуть ResponseText

DECLARE @url nvarchar(300)  
DECLARE @win int 
DECLARE @hr  int 
DECLARE @test nvarchar (200)
DECLARE @bin as binary(30)

SET @url = 'http://alfa-sms.ru:8080/smw/aisms'

	EXEC @hr=sp_OACreate 'MSXML2.ServerXMLHTTP',@win OUT 
	IF @hr <> 0 EXEC sp_OAGetErrorInfo @win 

	EXEC @hr=sp_OAMethod @win, 'Open',null,'POST',@url,0
	EXEC @hr=sp_OAMethod @win,N'setRequestHeader',NULL, 'Content-type', 'application/x-www-form-urlencoded; charset=UTF-8'
 	EXEC @hr=sp_OAMethod @win,'Send',NULL,'user=??????&pass=??????&action=post_sms&message=Hello Петя&target=???????'
	
	EXEC @hr=sp_OAGetProperty @win,'ResponseText', @test output
	IF @hr <> 0 EXEC sp_OAGetErrorInfo @win

	EXEC @hr=sp_OADestroy @win 
	 	
	select @test as ff -- в ответ получаем не читабельный   ?  
	
	/* а должно быть ч
		<output>
			<errors>
			<error>User authentication failed</error>
			</errors>
		</output>*/  
12 фев 13, 11:14    [13912597]     Ответить | Цитировать Сообщить модератору
 Re: Метод GET и POST библиотеки Microsoft.XMLHTTP и MSXML2.ServerXMLHTTP и UTF-8  [new]
Glory
Member

Откуда:
Сообщений: 104751
Soloxa
не решен вопрос как получить читабельный ответ сервера

Перекодировать его ?
12 фев 13, 11:17    [13912615]     Ответить | Цитировать Сообщить модератору
 Re: Метод GET и POST библиотеки Microsoft.XMLHTTP и MSXML2.ServerXMLHTTP и UTF-8  [new]
Soloxa
Member

Откуда:
Сообщений: 12
Glory
Soloxa
не решен вопрос как получить читабельный ответ сервера

Перекодировать его ?

в ответе один символ из одного символа как не раскодируй больше не получишь
12 фев 13, 13:03    [13913401]     Ответить | Цитировать Сообщить модератору
 Re: Метод GET и POST библиотеки Microsoft.XMLHTTP и MSXML2.ServerXMLHTTP и UTF-8  [new]
Сергей Мишин
Member

Откуда:
Сообщений: 376
Soloxa,

Откажитесь от "sp_OA...", намучаетесь ещё с "XMLHTTP". Оберните запрос данных в vbs-скрипт или SSIS-пакет и вызавайте как угодно.
12 фев 13, 14:04    [13913878]     Ответить | Цитировать Сообщить модератору
 Re: Метод GET и POST библиотеки Microsoft.XMLHTTP и MSXML2.ServerXMLHTTP и UTF-8  [new]
Glory
Member

Откуда:
Сообщений: 104751
Soloxa
в ответе один символ из одного символа как не раскодируй больше не получишь

А что один символ не может быть валидным ответом alfa-sms.ru:8080 ?
Где-то в описании этого alfa-sms.ru:8080 указаны все варианты ответов ?
12 фев 13, 14:09    [13913925]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить