|
Передача параметров POST с использованием Content-Type: application/x-www-form-u | ☑ | ||
---|---|---|---|---|
0
Джинн
10.12.13
✎
18:02
|
Есть кто с опытом в этой области? В частности как сформировать правильно файл отправки для Соединение.ОтправитьДляОбработки(имяФайлаОтправки,....)?
|
|||
1
acsent
10.12.13
✎
18:04
|
а в чем проблема?
|
|||
2
Джинн
10.12.13
✎
18:10
|
(1) Проблема в моем полнейшей непонимании этого :) Все мы рано или поздно что-то делаем в первый раз :)
Делаю примерно так: ЗаписьТекста = Новый ЗаписьТекста(имяФайлаОтправки); ЗаписьТекста.Записать("bookkeeperName=Иванов Иван Иванович"); ЗаписьТекста.Закрыть(); имяВыходногоФайла = ПолучитьимяВременногоФайла("xml"); ФайлОтправки = Новый Файл(имяФайлаОтправки); РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер()); Заголовки = Новый Соответствие(); Заголовки.Вставить("Content-Type", " application/x-www-form-urlencoded"); Заголовки.Вставить("Content-Length", РазмерФайлаОтправки); Соединение.ОтправитьДляОбработки(имяФайлаОтправки, "типа метод", имяВыходногоФайла, Заголовки); Хрень какая-то получается :( |
|||
3
Джинн
10.12.13
✎
18:12
|
Если нужно мордой по батарее повозить - не стесняйтесь. Никогда эту хрень раньше не делал.
|
|||
4
acsent
10.12.13
✎
18:15
|
UTF? убери bom
|
|||
5
Bober
10.12.13
✎
18:20
|
как вариант:
Заголовки = Новый Соответствие(); Заголовки.Вставить("Content-Type", " application/x-www-form-urlencoded"); Соединение.ОтправитьДляОбработки(имяФайлаОтправки, "типа метод" + "bookkeeperName=Иванов Иван Иванович", имяВыходногоФайла, Заголовки); |
|||
6
Джинн
10.12.13
✎
18:21
|
(4) UTF. Но тут что-то принципиально не так в коде. В http-запросе после переноса строки в заголовке какой-то бинарный мусор, а потом параметры. Причем не экранированные. Что-то я делаю не так :(
|
|||
7
Джинн
10.12.13
✎
18:22
|
(5) Как-то не кошерно выглядит. Должно же быть красивое и правильное решение.
|
|||
8
Jaap Vduul
10.12.13
✎
18:23
|
(6)
Используй ascii кодировку, и urlencode надо самому делать. |
|||
9
Bober
10.12.13
✎
18:23
|
(7) в смысле? если это тот параметр о котором ты говоришь, то он передается таким образом.
|
|||
10
Джинн
10.12.13
✎
18:26
|
(9) Т.е. файл отдельно, параметры отдельно, к методу приклеенные? Вы подробнее объясняйте, для особо тупых и военных. Я в этом вопросе ноль.
|
|||
11
Bober
10.12.13
✎
18:27
|
(10) какой файл, можно подробнее описать или скинуть АПИ сервиса
|
|||
12
Джинн
10.12.13
✎
18:31
|
Описание как есть (только адрес и имя методов убрал):
Запросы на изменение данных отправляются http-методом POST по url-адресу. Данные передаются в теле документа, то есть post-параметрами. Ну и табличка: Параметр/тип/комментарий bookkeeperName/string/Контактное лицо бухгалтерии |
|||
13
Джинн
10.12.13
✎
18:33
|
Должно на сервер придти
POST Имя_Метода HTTP/1.1 Host: ххх.ххх.ххх.ххх <всякие заголовки по одному на строку> <перенос строки> <тело документа> |
|||
14
Jaap Vduul
10.12.13
✎
18:34
|
||||
15
oleg_km
10.12.13
✎
18:57
|
(2) Заголовки.Вставить("Content-Length", РазмерФайлаОтправки); - это не надо, 1С сам подсчитает
ЗаписьТекста по-умолчанию пишет в UTF, поэтому действительно нужно убирать BOM. >> Хрень какая-то получается :( А как конкретно выглядит эта хрень? |
|||
16
oleg_km
10.12.13
✎
19:00
|
Еще, веб-сервер в какой кодировке ждет запрос. МОжет он действительно ждет в ANSI, а ты ему в UTF. В ЗаписьТекста попробуй добивь КОдировкаТекста.ANSI
|
|||
17
Джинн
10.12.13
✎
19:02
|
Тело запроса все равно не эскейпированно :(
Должно быть примерно bookkeeperName=%D0%98%D0%B3%D0%BE%D1%80%D1%8C. |
|||
18
acsent
10.12.13
✎
19:05
|
в функция отправитьдляобработки можно передавать хттп запрос, а его устанавливать по строке
|
|||
19
oleg_km
10.12.13
✎
19:06
|
(18) А, ну та это ручками нужно делать. Или base64 закодировать. 1С сама только параметры, передаваемы в URL преобразует
|
|||
20
acsent
10.12.13
✎
19:07
|
%D0%98%D0%B3%D0%BE%D1%80%D1%8C - вот это 1с не умеет сама
|
|||
21
oleg_km
10.12.13
✎
19:08
|
я какое-то время пользовался CHILKAT. Сейчас пользуюсь .NET
|
|||
22
Джинн
10.12.13
✎
19:22
|
Вы меня пугаете. Действительно параметры в теле документа не передать никак?
А через Content-Disposition: form-data; bookkeeper="Иванов Иван Иванович"? Если со стороны сервера поймают это? Или тоже геморрой? |
|||
23
kiruha
10.12.13
✎
19:28
|
А через
HTTP = Новый COMОбъект("MSXML2.XMLHTTP"); ? |
|||
24
sttt
10.12.13
✎
19:30
|
может поможет v8: v8: HTTP Запрос (ОтправитьДляОбработки())
|
|||
25
oleg_km
10.12.13
✎
20:47
|
Мне кажется, в любом случае, все что передается через POST в 1С ты сам должен испечь. 1С ведь не знает, что в файле, вдруг там бинарные данные
|
|||
26
Джинн
10.12.13
✎
22:24
|
(24) Спасибо. Завтра покурю.
(25) php перехватывает и распаковывает док в строку параметров сам. Только в данном случае спереди какой-то мусор добавляется, а сами параметры не эскейпированы :( |
|||
27
oleg_km
10.12.13
✎
22:37
|
(26) Мусор это похоже BOM. Попробуй все-таки айл сохранить в ANSI, может прокатит
|
|||
28
Поpyчик-4
10.12.13
✎
23:31
|
||||
29
Джинн
10.12.13
✎
23:35
|
(27) Уже пробовал :(
|
|||
30
Джинн
10.12.13
✎
23:36
|
(28) С этого я начал. Но там Content-Type другой.
|
|||
31
oleg_km
11.12.13
✎
09:29
|
(29) Ну тогда, если есть доступ переделать сервер, пусть он принимает или base64 или в GET, строку запроса в GET 1С вроде само обрабатывает. А если нет доступа или не хочется менять сервер то только использовать HTMLEncode. Я раньше пользовал CHILKAT, сейчас пользую .NET
|
|||
32
Джинн
11.12.13
✎
11:38
|
(31) А примерчик можно на .NET? Если не затруднит.
|
|||
33
oleg_km
11.12.13
✎
11:46
|
(31) На .NET будет посложнее. Вернее на самом нете ничего сложного нет, вот искомая функция:
Возврат ПолучитьТип"System.Web.HttpUtility", "System.Web").UrlEncode(исхСтрока, ПолучитьКодировку(текКодировка)); Но весь вопрос, как сделать .НЕТ доступным в 1С. Я пользуюсь компонентой из v8: v8: Использование сборок .NET в 1С 7.x и 8.x, можно использовать разработку Elisy, можно просто написать свой COM на C#, в который завернуть эту функцию. Но в любом случае на всех клиентах понадобится ДОТ.НЕТ. Если .НЕТ у вас не используется, мой вам совет: используйте CHILKAT. Там компонент String бесплатный, достаточно надежный, я его использовал больше года, пока не перешел на .НЕТ |
|||
34
acsent
11.12.13
✎
11:46
|
(30) поставь фидлер и посмотри что браузер отправляет
|
|||
35
Jaap Vduul
11.12.13
✎
12:22
|
||||
36
oleg_km
11.12.13
✎
12:43
|
(35) Ну в принципе можно и MD5 на 1С написать. Я уже пытался на 1С написать шаблон, проверяющий адрес электронного письма. Уже было 10 версий, то одно не учел, то что-то еще забыл. Короче изобретение велосипеда
|
|||
37
Леха Дум
11.12.13
✎
13:46
|
(0) кинь мыло или аську или скайп - кину примером на 1ц
|
|||
38
Джинн
11.12.13
✎
14:26
|
На мыло в личке написал
|
|||
39
Леха Дум
11.12.13
✎
14:42
|
(38) ответил
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |