Имя: Пароль:
1C
1C 7.7
v7: Запрос на портал через HTMLXML
0 maestro-72
 
19.04.18
12:05
Поставщик прислал:
POST /distributor_document/ HTTP/1.1
Host: auto.russkart.com
Cache-Control: no-cache
Postman-Token: bd0839b6-c5c3-b804-aed5-0d943fe72735
Content-Type: multipart/form-data; boundary=-------------573cf973d5228

---------------573cf973d5228
Content-Disposition: form-data; name="login"

488255ea401a70856fe4ccbbb9ab7155645abcfc
---------------573cf973d5228
Content-Disposition: form-data; name="pswd"

iloverusskart
---------------573cf973d5228
Content-Disposition: form-data; name="xml"

САМ XML строковой переменной
---------------573cf973d5228--

Я пытаюсь послать его следующим кодом:
Стр = ЭкранСпецСимволовXML(Стр);
    
    Инфо = СоздатьОбъект("AddIn.V7SysInfo");
    ГлобальноУникальныйИдентификатор = Инфо.СоздатьGUID();
    
    Boundary = СтрЗаменить(Строка(ГлобальноУникальныйИдентификатор),"-","");  
    
    ТекстЗапроса = "
    |Host: auto.russkart.com
    |Cache-Control: no-cache
    |Postman-Token: bd0839b6-c5c3-b804-aed5-0d943fe72735
    |Content-Type: multipart/form-data; boundary=-------------" + Boundary + "
    |-------------" + Boundary + "
    |Content-Disposition: form-data; name=""login""
    |" + Login + "
    |-------------" + Boundary + "
    |Content-Disposition: form-data; name=""pswd""
    |" + Password + "
    |-------------" + Boundary + "
    |Content-Disposition: form-data; name=""xml""
    |" + Стр + "
    |-------------" + Boundary;
    
    x = CreateObject("Microsoft.XMLHTTP");
    
    x.OPEN ("POST", url, 0);
    x.SetRequestHeader("Content-Type", "text/xml; charset=utf-8");  
    x.send(ТекстЗапроса);  

В ответ приходит ошибка - не передан логин.
Не пойму в чем дело. Может кто нибудь направить на путь истинный. Может я чтото не так делаю...
1 BalBess
 
19.04.18
12:34
Заголовки блока от "тела" блока должны отделяться пустой строкой
https://ru.wikipedia.org/wiki/Multipart/form-data
т.е. нужно вставить РазделительСтрок() кое где
2 BalBess
 
19.04.18
12:37
должно быть как вам выслал поставщик, а у вас нет
Можно сохранить куда-нибудь получившийся запрос и посмотреть
3 Djelf
 
19.04.18
12:39
+при отправке в хидере нужно Boundary  указывать
4 BalBess
 
19.04.18
12:55
(3) да, кстати, вы еще и Content-Type неправильно передаете - это вообще заголовок и должен быть не text/xml
что-то типа
x.setrequestheader("Content-Type", "multipart/form-data; boundary=" + boundary);
5 BalBess
 
19.04.18
12:58
и вообще запрос неправильный )
первые несколько строк - это заголовки (до Content-Disposition)
6 Kigo_Kigo
 
19.04.18
13:08
Функция СоздатьXMLHttpRequest(URL,Метод = "GET")
    
    Попытка
        XMLHttpRequest = СоздатьОбъект("Msxml2.XMLHTTP.6.0");
    Исключение
        Попытка
            XMLHttpRequest = СоздатьОбъект("Msxml2.XMLHTTP.3.0");
        Исключение
            Попытка
                XMLHttpRequest = СоздатьОбъект("Msxml2.XMLHTTP");
            Исключение
                Попытка
                    XMLHttpRequest = СоздатьОбъект("Microsoft.XMLHTTP");
                Исключение
                    Сообщить("Невозможно создать XMLHttpRequest.                                                                                          
                    |" + ОписаниеОшибки(), "!");
                КонецПопытки;
            КонецПопытки;
        КонецПопытки;
    КонецПопытки;
    
    XMLHttpRequest.open(Метод, URL, 0);
    
    Возврат XMLHttpRequest;
    
КонецФункции
7 Kigo_Kigo
 
19.04.18
13:08
Функция СоздатьGUID()
    TypeLib = CreateObject("Scriptlet.TypeLib");
    NewGUID = TypeLib.Guid();
    TypeLib = "";
    Возврат NewGUID;
КонецФункции
8 Kigo_Kigo
 
19.04.18
13:09
URL = "https://=======.com/v1/partner/company";;
    XMLHttpRequest = СоздатьXMLHttpRequest(URL);
    XMLHttpRequest.Open("GET", URL, 0);  
    XMLHttpRequest.setRequestHeader("Accept", "application/json");
    XMLHttpRequest.setRequestHeader("X-Api-Key", Токен);

    XMLHttpRequest.setRequestHeader("X-Origin-Request-Id", Строка(XOriginRequestId));
    XMLHttpRequest.setRequestHeader("X-Timestamp", Строка(XTimestamp));
    ТекстЗапроса = "https://=======.com/v1/partner/company";;
    XMLHttpRequest.send(ТекстЗапроса);
    //Текст = XMLHttpRequest.responseXml.xml;
    ТекстОтвета = СоздатьОбъект("Текст");
    ТекстОтвета.открыть(КаталогИБ()+"txt2_");
    ОтветОтСервера=СокрЛП(XMLHttpRequest.responseText);
9 Kigo_Kigo
 
19.04.18
13:10
Далее сами
10 BalBess
 
19.04.18
13:19
(8) вообще не в тему
11 Kigo_Kigo
 
19.04.18
13:25
(10) Как это не в тему?
Создание реально рабочей компоненты, открытие урл, установка заголовка, формирование запроса, запрос, ответ, я из свое брал, а уж ТС пусть сам под себя интерпритирует
12 Kigo_Kigo
 
19.04.18
13:28
(11) + если бы мне в свое время дали бы подобный код, я не убил бы 2 недели на его написание,собирая инфу по крупицам, причем я в вебе полный ноль
13 BalBess
 
19.04.18
13:50
(11) открытие урл, установка заголовка, формирование запроса, запрос, ответ - все это автор уже сделал, ответ уже получает. Вопрос был именно про сам запрос.
Че-то он потерялся, получилось наверное )
14 maestro-72
 
19.04.18
21:15
Не, просто комп отобрали :-). Сейчас пробовать буду. Кто откликнусля всем спасибо!
15 kofeinik
 
19.04.18
22:14
(0) Обмен дистрибьютора с рускартом под 7-ку делаешь?
16 maestro-72
 
20.04.18
11:16
(15) Да
Вот так это завелось, кому интересно будет:
Стр = ДокXML.ПредставлениеXML;  
    
    Стр = Заг + Симв(10) + Симв(13) + Стр;
    
    Инфо = СоздатьОбъект("AddIn.V7SysInfo");
    ГлобальноУникальныйИдентификатор = Инфо.СоздатьGUID();
    
    Boundary = СтрЗаменить(Строка(ГлобальноУникальныйИдентификатор),"-","");  
    
    ТекстЗапроса = "";
                                      
    //Логин
    ТекстЗапроса = ТекстЗапроса + "--"+Boundary + РазделительСтрок;
    ТекстЗапроса = ТекстЗапроса + "Content-Disposition: form-data; name=""login""" + РазделительСтрок;
    ТекстЗапроса = ТекстЗапроса + РазделительСтрок;
    ТекстЗапроса = ТекстЗапроса + Login + РазделительСтрок;
    
    //Пароль
    ТекстЗапроса = ТекстЗапроса + "--"+Boundary + РазделительСтрок;
    ТекстЗапроса = ТекстЗапроса + "Content-Disposition: form-data; name=""pswd""" + РазделительСтрок;
    ТекстЗапроса = ТекстЗапроса + РазделительСтрок;
    ТекстЗапроса = ТекстЗапроса + Password + РазделительСтрок;
    
    //Данные
    ТекстЗапроса = ТекстЗапроса + "--"+Boundary + РазделительСтрок;
    ТекстЗапроса = ТекстЗапроса + "Content-Disposition: form-data; name=""xml""" + РазделительСтрок;
    ТекстЗапроса = ТекстЗапроса + РазделительСтрок;
    ТекстЗапроса = ТекстЗапроса + Стр + РазделительСтрок;    
    
    //Закрываем
    ТекстЗапроса = ТекстЗапроса + "--" + Boundary + "--";
    
    x = CreateObject("Microsoft.XMLHTTP");
    
    x.OPEN ("POST", url, 0);
    x.SetRequestHeader("Host", "auto.russkart.com");
    x.SetRequestHeader("Cache-Control", "no-cache");
    x.SetRequestHeader("Postman-Token", "bd0839b6-c5c3-b804-aed5-0d943fe72735");
    x.SetRequestHeader("Content-Type", "multipart/form-data; boundary=" + Boundary);    
    x.send(ТекстЗапроса);
17 Kigo_Kigo
 
20.04.18
11:43
Еще бы длл ку бы выложил
Инфо = СоздатьОбъект("AddIn.V7SysInfo")
было бы прекрасно!
18 Salimbek
 
20.04.18
12:05
(17) Это стандартная V7plus.dll
19 Salimbek
 
20.04.18
12:08
+(18) Еще в 1cpp.dll есть объект guid, можно оттуда использовать.
20 maestro-72
 
20.04.18
12:21
(17) Да, все правильно в (18) подсказали. Это стандартная библиотека 1с77.
21 Kigo_Kigo
 
20.04.18
15:09
Хнык хнык, она не работает с httpS, так что если сайт перейдет на httpS- ваш код перестанет работать
22 maestro-72
 
21.04.18
17:01
(21) Тогда займемся решением этой проблемы.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс