Начало было тут: Установить cookie в httprequest Ладно, обошлась без печенек, просто передаю с каждым запросом имя и пароль - дошла до шага получения файла и снова застряла:
Функция ПолучитьДанные(Соединение, Операция)
Если ТипЗначенияСтр(Соединение) = "OLE.IServerXMLHTTPRequest2" Тогда
Соединение.Open("GET", ПараметрыЗапроса.АдресСервера + "?type=" + ПараметрыЗапроса.ТипЗапроса + "&mode=" + Операция, 0, ПараметрыЗапроса.ИмяПользователя, ПараметрыЗапроса.ПарольПользователя);
ИначеЕсли ТипЗначенияСтр(Соединение) = "OLE.IWinHttpRequest" Тогда
Соединение.Open("GET", ПараметрыЗапроса.АдресСервера + "?type=" + ПараметрыЗапроса.ТипЗапроса + "&mode=" + Операция, 0);
Соединение.SetCredentials(ПараметрыЗапроса.ИмяПользователя, ПараметрыЗапроса.ПарольПользователя, 0);
КонецЕсли;
Если ПустоеЗначение(ПараметрыЗапроса.Печенька) = 0 Тогда
Соединение.SetRequestHeader("Cookie", ПараметрыЗапроса.Печенька);
КонецЕсли;
Соединение.Send("");
Если Соединение.Status <> 200 Тогда
глСервис.ИконкаПредупреждения(1,1,);
Предупреждение(Строка(Соединение.Status) + РазделительСтрок + Соединение.statusText);
глСервис.ИконкаПредупреждения(1,,1);
Возврат 0;
КонецЕсли;
Возврат 1;
КонецФункции
И вот тут оказывается что у Cоединения пусто везде - и в responseText и в responseBody и в responseStream и в responseXML (при использовании XMLHTTP)! Но сайт мне рапортует что успешно отправил мне файл!
Кто-нибудь знает, как получить файл через WinHttpRequest/ServerXMLHTTP?
Вы все таки будете смеяться, но дело оказалось в кодировке файла. Поменять кодовую страницу объекта ни через Option ни через заголовки мне так и не удалось, и сервер упорно отвечал мне в utf-8:
HTTP/1.1 200 OK
Server: nginx
Date: Mon, 06 Feb 2023 13:32:21 GMT
Content-Type: text/plain; charset=utf-8
и в результате видимо приходила каша, которую 1с не могла прочитать
Но в настройках обмена с 1с у inSales есть указание кодовой страницы выдаваемого файла. По умолчанию - "windows-1251". Поменяла на "utf-8" и вуаля - в ResponseText оказалось нормальное содержимое xml файла!
Попытка
httpRequest.open("GET",урл_АдресЗагрузки+ТекФайл,);
httpRequest.send();
Ответ = httpRequest.Status;
Исключение
Сообщить("> неудачная попытка запроса на загрузку файла...","i");
Сообщить("> "+СимволТабуляции+"|_ "+ОписаниеОшибки(),"i");
Продолжить;
КонецПопытки;
КодОтвета = Число(Ответ);
Если КодОтвета = 200
Тогда ЗагруженоУспешно=ЗагруженоУспешно+1;
Иначе
Если Режим = 1
Тогда Сообщить("> |_ запрос файла "+урл_АдресЗагрузки+ТекФайл+", ответ: "+Ответ);
КонецЕсли;
Продолжить;
КонецЕсли;
Что интересно, похоже в ResposeText что - то есть, при попытке обратиться к его содержимому получаю:
- MSXML: msxml6.dll: Достигнут конец файла при недопустимом состоянии текущей кодировки.
- WinHttp: WinHttp.WinHttpRequest: Символ Юникода не имеет сопоставления в конечной многобайтовой кодовой странице
Пробовала выставить кодовую страницу и через
- MSXML: Соединение.setOption(0,"windows-1251")
- WinHttp: Соединение.Opton(2, "windows-1251")
(2)adodb.stream тоже жалуется на
- MSXML: msxml6.dll: Достигнут конец файла при недопустимом состоянии текущей кодировки.
- WinHttp: WinHttp.WinHttpRequest: Символ Юникода не имеет сопоставления в конечной многобайтовой кодовой странице
при попытке WriteText(Соединение.ResponseText)
Вы все таки будете смеяться, но дело оказалось в кодировке файла. Поменять кодовую страницу объекта ни через Option ни через заголовки мне так и не удалось, и сервер упорно отвечал мне в utf-8:
HTTP/1.1 200 OK
Server: nginx
Date: Mon, 06 Feb 2023 13:32:21 GMT
Content-Type: text/plain; charset=utf-8
и в результате видимо приходила каша, которую 1с не могла прочитать
Но в настройках обмена с 1с у inSales есть указание кодовой страницы выдаваемого файла. По умолчанию - "windows-1251". Поменяла на "utf-8" и вуаля - в ResponseText оказалось нормальное содержимое xml файла!