С помощью метода ПолучитьКакФайл пытаюсь с сайта выгрузить файл xml нужного формата. Проблема - файл не загружается полностью.
Код:
ХТТПСоединение = СоздатьОбъект("AddIn.V7HttpReader");
ХТТПСоединение.КоличествоПопытокАвторизации = 3;
ХТТПСоединение.Пользователь("admin","Tester1");
Стр = "";
ХТТПСоединение.ПолучитьКакФайл("http://www.********=19.11.2013&login=admin&password=Tester1",СокрЛП(КаталогИБ()) + "заказы.xml");
Пробовал по всякому и через ПолучитьКакСтроку и с циклом после получения (типа для докачивания, если оно в фоне).
Все-равно файл загружается не полностью. Если через браузер все скачивается без проблем. Вес файла не более 5 килобайт.
Кто сталкивался, как решить подобную задачу?
И еще. Метод ПолучитьКакФайл() считается устаревшим и является частным случаем метода Получить() (подробности здесь: источник). Заодно проверь "свежесть" используемых dll.
Тут вот твоя тема описана немного: http://infostart.ru/public/60330/. Думаю, поможет в принятии правильного решения. Просто "в лоб" этой компонентой пользоваться нельзя.
(16)
Пожалуйста.
За мою многолетнюю практику 1С-ника столкнулся с таким количеством граблей, на которые пришлось наступить и зачастую не раз. А на самом деле все очень легко решается. Хоть заводи отдельную статью "Грабли" и описывай все минипроблемки и пути решения.:)))
С помощью метода ПолучитьКакФайл пытаюсь с сайта выгрузить файл xml нужного формата.
Кто на ком стоял?
Пиши по-русскому языкому, если хочешь чтобы тебя можно понять.
Пытаться с помощью ПолучитьКакФайл выгрузить файл с сайта - это как про сон сказать, что это не сон, а про не сон - сон (с) Алладин. В результате обязательно получится пронесон, что, собственно, и наблюдается в твоем случае ...
Вот кусок кода моего Инернет-Магазина:
Если ЗагрузитьВнешнююКомпоненту(КаталогИБ() + "v7plus.dll") <> 1 Тогда
Если ЗагрузитьВнешнююКомпоненту(КаталогИБ() + "ExtForms\" + "v7plus.dll") <> 1 Тогда
Если ЗагрузитьВнешнююКомпоненту(КаталогПрограммы() + "v7plus.dll") <> 1 Тогда
Предупреждение("Компонента v7plus.dll не найдена!", 60);
Возврат;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Попытка
Соединение = СоздатьОбъект("Addin.V7HttpReader") ;
Соединение.КоличествоПопытокАвторизации = 3;
Исключение
Сообщить("Не удалось создать объект Addin.V7HttpReader!");
Возврат;
КонецПопытки;
ВремКаталог = КаталогВременныхФайлов();
Попытка
Соединение.ПолучитьКакФайл(АдресРесурса+"katalogim.xml",ВремКаталог+"katalogim.xml");
СпЗагруженныхФайлов.ДобавитьЗначение("Файл",ВремКаталог+"katalogim.xml");
Исключение
Сообщить("Неудачная попытка соединения.");
Сообщить(Соединение.СтрокаСостоянияОтвета) ;
Возврат;
КонецПопытки;
Если ФС.СуществуетФайл(ВремКаталог+"katalogim.xml")=0 Тогда
Сообщить("Не удалось получить ответ с сайта. Проверьте интернет соединение.");
Возврат;
КонецЕсли;
xmlАнализатор = СоздатьОбъект("AddIn.XMLParser");
xmlФайл = xmlАнализатор.СоздатьПоследовательноСчитываемыйДокумент();
xmlФайл.СвязатьСФайлом(ВремКаталог+"katalogim.xml");
ТипТега = xmlФайл.Спуститься();
Пока ТипТега <> 4 Цикл // пока не достигнут конец файла
Если ТипТега <> 1 Тогда
ТипТега = xmlФайл.Следующий();
Продолжить;
КонецЕсли;
ИмяТега = xmlФайл.СвойстваТекущегоУзла.Имя;
Если ИмяТега = "КаталогИМ" Тогда
ТипТега = xmlФайл.Спуститься();
Продолжить;
...
ИначеЕсли ИмяТега="Файл" Тогда
ПутьКФайлу=""+xmlФайл.ТекущийЭлементВВидеОбъекта().Значение;
НазвФайла=СтрЗаменить(СтрЗаменить(ПутьКФайлу,"/",""),""+ТаблОсн.КодТовара,"");
Если ФС.СуществуетФайл(ВремКаталог+ТаблОсн.КодТовара+"\")=0 Тогда
ФС.СоздатьКаталог(ВремКаталог+ТаблОсн.КодТовара);
СпЗагруженныхФайлов.ДобавитьЗначение("Каталог",ВремКаталог+ТаблОсн.КодТовара);
КонецЕсли;
Если ФС.СуществуетФайл(ВремКаталог+ПутьКФайлу)=0 Тогда
Попытка
Соединение.ПолучитьКакФайл(АдресРесурса+ПутьКФайлу,ВремКаталог+ПутьКФайлу);
СпЗагруженныхФайлов.ДобавитьЗначение("Файл",ВремКаталог+ПутьКФайлу);
Исключение
Сообщить("Неудачная попытка соединения.");
//Сообщить(Соединение.СтрокаСостоянияОтвета) ;
КонецПопытки;
Если ФС.СуществуетФайл(ВремКаталог+ПутьКФайлу)=0 Тогда
Сообщить("Не удалось получить изображение с сайта. Проверьте интернет соединение.");
КонецЕсли;
КонецЕсли;
СпКартинок.ДобавитьЗначение(ВремКаталог+ПутьКФайлу,ПодписьКСкану);
ПодписьКСкану="";
ТаблОсн.Картинка=СпКартинок;
КонецЕсли;
ТипТега = xmlФайл.Следующий();
КонецЦикла;
Показать
Все работает. Сначала обработка получает файл xml, разбирает его и докачивает картинки по адресам из этого же файла.
Что я делаю не так?
(12)
Какой вы однако, к словам придираетесь. По-моему я достаточно ясно отписал, у всех кроме вас никаких проблем с осознанием смысла моего высказывания не возникает.
Касасательно:
Это не работает, когда динамически генерируется страница через пост-запрос. ПолучитьКакФайл работает для скачивания ТОЛЬКО статического содержимого. О чем и было сказано выше.
Вместо того, чтобы просто как-то вчитаться и осознать что написано, вы оскорбляете. Нехорошо это.
(13) Goruch, Вздор распространяешь. Причем, безапелляционный и самоуверенный.
Методы v7plus работают стабильно и в соответствии с заявленным функционалом. Не надо катить на dll безграмотную чепуху.
Обращение к серверу с параметрами в ожидании возврата от него строки/файла делается совсем не так.
Например, так: http://snegovic8-8.narod.ru/ или так, как сделана загрузка курсов валют в типовых конфигурациях.
В любом случае, 1С тут не при делах - что сервер дает, то она и получает. А если на сервере кривые руки, то никакие скрипты их не выправят ...
(14)
Почему через браузер я получаю по ссылке нормальный xml файл, а через длл получаю обрезанный xml файл? Весь порядок действий описал.
А прежде чем о чем-то говорить почитай, что пишут http://infostart.ru/public/60330/ .