Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Запрос на портал через HTMLXML

v7: Запрос на портал через HTMLXML
Я
   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(ТекстЗапроса);   

В ответ приходит ошибка - не передан логин.
Не пойму в чем дело. Может кто нибудь направить на путь истинный. Может я чтото не так делаю...
 
 
   BalBess
 
1 - 19.04.18 - 12:34
Заголовки блока от "тела" блока должны отделяться пустой строкой
https://ru.wikipedia.org/wiki/Multipart/form-data
т.е. нужно вставить РазделительСтрок() кое где
   BalBess
 
2 - 19.04.18 - 12:37
должно быть как вам выслал поставщик, а у вас нет
Можно сохранить куда-нибудь получившийся запрос и посмотреть
   Djelf
 
3 - 19.04.18 - 12:39
+при отправке в хидере нужно Boundary  указывать
   BalBess
 
4 - 19.04.18 - 12:55
(3) да, кстати, вы еще и Content-Type неправильно передаете - это вообще заголовок и должен быть не text/xml
что-то типа
x.setrequestheader("Content-Type", "multipart/form-data; boundary=" + boundary);
   BalBess
 
5 - 19.04.18 - 12:58
и вообще запрос неправильный )
первые несколько строк - это заголовки (до Content-Disposition)
   Kigo_Kigo
 
6 - 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;
    
КонецФункции
   Kigo_Kigo
 
7 - 19.04.18 - 13:08
Функция СоздатьGUID()
    TypeLib = CreateObject("Scriptlet.TypeLib");
    NewGUID = TypeLib.Guid();
    TypeLib = "";
    Возврат NewGUID;
КонецФункции
   Kigo_Kigo
 
8 - 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);
   Kigo_Kigo
 
9 - 19.04.18 - 13:10
Далее сами
   BalBess
 
10 - 19.04.18 - 13:19
(8) вообще не в тему
 
 Рекламное место пустует
   Kigo_Kigo
 
11 - 19.04.18 - 13:25
(10) Как это не в тему?
Создание реально рабочей компоненты, открытие урл, установка заголовка, формирование запроса, запрос, ответ, я из свое брал, а уж ТС пусть сам под себя интерпритирует
   Kigo_Kigo
 
12 - 19.04.18 - 13:28
(11) + если бы мне в свое время дали бы подобный код, я не убил бы 2 недели на его написание,собирая инфу по крупицам, причем я в вебе полный ноль
   BalBess
 
13 - 19.04.18 - 13:50
(11) открытие урл, установка заголовка, формирование запроса, запрос, ответ - все это автор уже сделал, ответ уже получает. Вопрос был именно про сам запрос.
Че-то он потерялся, получилось наверное )
   maestro-72
 
14 - 19.04.18 - 21:15
Не, просто комп отобрали :-). Сейчас пробовать буду. Кто откликнусля всем спасибо!
   kofeinik
 
15 - 19.04.18 - 22:14
(0) Обмен дистрибьютора с рускартом под 7-ку делаешь?
   maestro-72
 
16 - 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(ТекстЗапроса);
   Kigo_Kigo
 
17 - 20.04.18 - 11:43
Еще бы длл ку бы выложил
Инфо = СоздатьОбъект("AddIn.V7SysInfo")
было бы прекрасно!
   Salimbek
 
18 - 20.04.18 - 12:05
(17) Это стандартная V7plus.dll
   Salimbek
 
19 - 20.04.18 - 12:08
+(18) Еще в 1cpp.dll есть объект guid, можно оттуда использовать.
   maestro-72
 
20 - 20.04.18 - 12:21
(17) Да, все правильно в (18) подсказали. Это стандартная библиотека 1с77.
   Kigo_Kigo
 
21 - 20.04.18 - 15:09
Хнык хнык, она не работает с httpS, так что если сайт перейдет на httpS- ваш код перестанет работать
   maestro-72
 
22 - 21.04.18 - 17:01
(21) Тогда займемся решением этой проблемы.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует