|   |   | 
| 
 | 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) Тогда займемся решением этой проблемы.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |