Метод GET и POST библиотеки Microsoft.XMLHTTP и MSXML2.ServerXMLHTTP и UTF-8

Soloxa
Дата: 10.02.2013 19:06:57
Используя метод 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 
Soloxa
Дата: 11.02.2013 14:57:41
Как решить проблему ?
shalomb
Дата: 11.02.2013 17:42:53
Rabotai v Unicode u tebja @test varchar(100) zameni na nvarchar(100)
Glory
Дата: 11.02.2013 17:48:39
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
Soloxa
Дата: 11.02.2013 21:11:53
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 
Soloxa
Дата: 11.02.2013 21:24:42
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")
Ennor Tiegael
Дата: 12.02.2013 05:35:11
Soloxa,

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

то скрипт внизу отрабатывает без ошибок
По-моему, вы убрали setContextHeader.
Glory
Дата: 12.02.2013 10:13:31
И еще
SQL Server stores Unicode data by using the UCS-2 encoding scheme, а не в UTF-8
Ennor Tiegael
Дата: 12.02.2013 10:36:11
Glory,

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

Так что косяк явно в переносе кода с VB на T-SQL.
Glory
Дата: 12.02.2013 10:43:11
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 тоже ?