|
v7: Отправка XML с помощью Curl | ☑ | ||
---|---|---|---|---|
0
Aleksandra_19
28.12.16
✎
15:44
|
Добрый день! Проблема следующая.
Формирую файлы xml и отправляю их с помощью curl на сервер. Сама отправка происходит без проблем, файлы добавляются на сервер. После этого сервер присылает ответ в виде файла response.txt, который нужно обработать (достать оттуда код ответа сервера). Ошибка возникает при попытке открыть это respons.txt для обработки. Пшу так: ТекстПараметров = "C:\curl-7.52.0-win64-mingw\bin\" + "curl.exe" + "параметры передачи файлов"; ЗапуститьПриложение(ТекстПараметров); ФайлЛога.Очистить(); ПустьКФайлу = "D:\SERTHTTP\response.txt"; Если ФС.СуществуетФайл(ПустьКФайлу) = 1 Тогда ФайлЛога.КодоваяСтраница(0); ФайлЛога.Открыть(ПустьКФайлу); Если ФайлЛога.КоличествоСтрок() > 0 Тогда //достаем информацию из файла КонецЕсли; Иначе Пока ФС.СуществуетФайл(ПустьКФайлу) = 0 Цикл ФС.СуществуетФайл(ПустьКФайлу); Если ФС.СуществуетФайл(ПустьКФайлу) = 1 Тогда //обработка файла Прервать; КонецЕсли; КонецЦикла; КонецЕсли; В строке ФайлЛога.Открыть(ПустьКФайлу); постоянно выдает ошибку - Неверное имя файла. Подскажите, пожалуйста, в чем проблема? |
|||
1
trdm
28.12.16
✎
15:48
|
Обычно файл после Очистить(); надо еще и записать а потом закрыть.
|
|||
2
trdm
28.12.16
✎
15:49
|
Попробуй заменить объект "Текст" на "TextStream" из vbs.
Set FSO = CreateObject("Scripting.FileSystemObject") Set TextStream = FSO.CreateTextFile("C:\Test.txt") |
|||
3
trdm
28.12.16
✎
15:50
|
У него есть метод close();
|
|||
4
Garykom
гуру
28.12.16
✎
15:51
|
Переходите с курла на Ъ :)
|
|||
5
Aleksandra_19
28.12.16
✎
15:52
|
(3) Записывать ФайлЛога сразу после создания и тут же его закрывать?
|
|||
6
trdm
28.12.16
✎
15:59
|
Попробуй поменять местами:
ЗапуститьПриложение(ТекстПараметров); ФайлЛога.Очистить(); У тебя файл лога же тут заполняется курлом: ЗапуститьПриложение(ТекстПараметров); А потом ты его очищаешь. |
|||
7
Serginio1
28.12.16
✎
16:00
|
(4) Ему Ъ не нужен. Он на 7 ке не поддерживается.
Проще использовать Использование классов .Net в 1С для новичков .Net в 1С. Парсинг сайтов, multipart/form-data, gzip итд http://ru.stackoverflow.com/questions/527763/%d0%9a%d0%b0%d0%ba-%d0%b2%d1%8b%d0%b7%d0%b2%d0%b0%d1%82%d1%8c-%d0%bc%d0%b5%d1%82%d0%be%d0%b4-%d0%b8%d0%b7-c-%d0%b2-1%d0%a1/527802#527802 |
|||
8
Aleksandra_19
28.12.16
✎
16:06
|
(6) У меня сначала вызывается запуск курла, а потом очистка файла. Курл присылает ответ в файл respons.txt, а не в ФайлЛога. Или что-то не допонимаю?
|
|||
9
ptiz
28.12.16
✎
16:07
|
ЗапуститьПриложение() - оно точно ждет окончания?
Попробуй через "WScript.Shell" и метод .Run(ТекстПараметров, 0, 1); |
|||
10
Aleksandra_19
28.12.16
✎
16:12
|
Возможно, я не правильно понимаю смысл самой работы с курлом.Попробую переформулировать вопрос - курл отрабатывает, после этого в определенной папке на диске D появляется текстовик respons.txt, в котором содержится ответ сервера. как мне выбрать именно этот respons.txt и прочитать его содержимое?
|
|||
11
trdm
28.12.16
✎
16:12
|
(8) Понятно. Думал респонс и файл лога одно и тоже.
|
|||
12
Aleksandra_19
28.12.16
✎
16:15
|
(11) ФайлЛога я сама создала через объект "Текст", чтобы добраться как-то до содержимого этого respons, но в итоге запуталась и не могу найти ошибку
|
|||
13
ptiz
28.12.16
✎
16:27
|
(12) Файл в проводнике есть или нет?
|
|||
14
trdm
28.12.16
✎
16:34
|
(13) есть. Но он залочен.
стандартный способ проверить отпустило ли файло - попробовать переименовать его. попробуй: ФайлЛога.Очистить(); ПустьКФайлу = "D:\SERTHTTP\response.txt"; ПустьКФайлу2 = "D:\SERTHTTP\response.txt.txt"; Если ФС.СуществуетФайл(ПустьКФайлу) = 1 Тогда Пока ФС.СуществуетФайл(ПустьКФайлу2) = 0 Цикл Попытка ФС.ПереименоватьФайл(ПустьКФайлу,ПустьКФайлу2,1); Исключение КонецПопытки; КонецЦикла; ФС.ПереименоватьФайл(ПустьКФайлу2,ПустьКФайлу,1); ФайлЛога = СоздатьОбъект("Текст"); ФайлЛога.КодоваяСтраница(0); ФайлЛога.Открыть(ПустьКФайлу); Если ФайлЛога.КоличествоСтрок() > 0 Тогда //достаем информацию из файла КонецЕсли; Иначе Пока ФС.СуществуетФайл(ПустьКФайлу) = 0 Цикл ФС.СуществуетФайл(ПустьКФайлу); Если ФС.СуществуетФайл(ПустьКФайлу) = 1 Тогда //обработка файла Прервать; КонецЕсли; КонецЦикла; КонецЕсли; |
|||
15
Aleksandra_19
28.12.16
✎
16:43
|
(14) ФС.СуществуетФайл(ПустьКФайлу) возвращает 1, т.е. файл уже появляется
|
|||
16
Aleksandra_19
28.12.16
✎
16:48
|
(14) А что делать если файла нет? как словить момент, когда отпускает файл? Потому что если проделать этот код в отладчике - все отрабатывает отлично
|
|||
17
trdm
28.12.16
✎
16:56
|
(16) > как словить момент, когда отпускает файл?
ждать с помощью: Пока ФС.СуществуетФайл(ПустьКФайлу2) = 0 Цикл Попытка ФС.ПереименоватьФайл(ПустьКФайлу,ПустьКФайлу2,1); Исключение КонецПопытки; КонецЦикла; а лучше с пом Sleep(1000); |
|||
18
Garykom
гуру
28.12.16
✎
16:57
|
Зачем "ловить момент" когда можно дождаться окончания работы curl'а ?
Прочитай уже (9) или "start /wait" |
|||
19
Garykom
гуру
28.12.16
✎
16:59
|
(17) Так и хочется спросить вы ждете когда чайник сам закипит и выключится или в процессе постоянно "не кипела" отливаете и тестируете сахаром или термометром?
|
|||
20
trdm
28.12.16
✎
17:05
|
ну, девушко читает посты ч/з один. что поделаешь?
|
|||
21
Serginio1
28.12.16
✎
17:20
|
Казалось бы, что проще
Функция ВыполнитьПост(uriSources,Клиент) // Контент=Врап.СоздатьОбъект("System.Net.Http.StringContent","Тестовая Строка",Encoding.UTF8,"text/plain"); Контент=Врап.СоздатьОбъект("System.Net.Http.StringContent","Тестовая Строка "+uriSources); резулт=Клиент.PostAsync(uriSources,Контент).Result; Сообщить("==================================="); Сообщить(резулт.IsSuccessStatusCode); Сообщить(Врап.Встроку(резулт.StatusCode)); стр=резулт.Content.ReadAsStringAsync().Result; Сообщить(ПолучитьСтрокуОтвета(стр)); КонецФункции // ВыполнитьПост() |
|||
22
Serginio1
28.12.16
✎
17:24
|
Клиент = Врап.СоздатьОбъект(HttpClient);
Контент = Врап.СоздатьОбъект(MultipartFormDataContent); ПотокФайла2 =Врап.ПолучитьТип("System.IO.File").OpenRead(ИмяФайла); ФайловыйКонтент2 =Врап.СоздатьОбъект("System.Net.Http.StreamContent",ПотокФайла2); // Можно добавить несколько файлов Контент.Add(ФайловыйКонтент2,"attachment","TestXml"); requestUri = "api/values/SendFiles"; Результат = Клиент.PostAsync(requestUri, Контент).Result; стр = Результат.Content.ReadAsStringAsync().Result; |
|||
23
Garykom
гуру
28.12.16
✎
17:25
|
(21) сначала ВК скачать и подключить, а без этого самого главного 99% типичных 1С-ников ничего не поняли
|
|||
24
Serginio1
28.12.16
✎
17:25
|
22+ это отправка нескольких файлов multipart/form-data
|
|||
25
Serginio1
28.12.16
✎
17:26
|
(23) Я же все ссылочки в 7 дал.
|
|||
26
Serginio1
28.12.16
✎
17:28
|
(23) Кстати хорошая ссылока про Ionic 2
|
|||
27
Serginio1
28.12.16
✎
17:28
|
||||
28
Garykom
гуру
28.12.16
✎
17:29
|
(25) Там если специально не подготовленный человек откроет любую ссылку и попробует разобраться ему скорую вызывать может понадобиться ))
|
|||
29
Garykom
гуру
28.12.16
✎
17:29
|
(26)(27) What is Ionic?
|
|||
30
Serginio1
28.12.16
✎
17:31
|
(29) Посмотри по ссылке. Это Angular 2 приложение для мобильников с доступом к хард части через Cordova
|
|||
31
Garykom
гуру
28.12.16
✎
17:31
|
(30) да понял https://habrahabr.ru/company/simpleweek/blog/254681/ очередной "модный фреймворк"
|
|||
32
Serginio1
28.12.16
✎
17:51
|
(31) Скорее это https://habrahabr.ru/post/316766/
|
|||
33
Aleksandra_19
28.12.16
✎
20:05
|
Всем спасибо! Все решилось заменой ЗапуститьПриложение() на КомандаСистемы(). Файл respons.txt сразу стал доступен.
Еще раз спасибо за советы и ссылки! |
|||
34
Garykom
гуру
28.12.16
✎
20:56
|
(33) Если .net через (21)(22) то будет намного красивее без мигающих черных окон CMD/curl
|
|||
35
trdm
28.12.16
✎
22:29
|
(33) Правильно. ЗапуститьПриложение() не ждет окончания процесса, а КомандаСистемы() ждет. в (9) был намек.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |