Имя: Пароль:
1C
 
POST запрос, что не так?
0 НеПапоКарло
 
23.10.19
17:30
Имеем запрос:

POST /asup_rus/WebServiceLoadDistr/Service_for_otgr.asmx HTTP/1.1
Host: asup.konti.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "https://asup.konti.com/HelloWorld";
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xmlns:xsd="http://www.w3.org/2001/XMLSchema"; xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">;
  <soap:Body>
    <HelloWorld xmlns="https://asup.konti.com/">;
  </soap:Body>
</soap:Envelope>

Код в 1С:

Соединение =  Новый HTTPСоединение("asup.konti.com",,,);

ТекстФайл = Новый ТекстовыйДокумент;
ТекстФайл.ДобавитьСтроку("POST /asup_rus/WebServiceLoadDistr/Service_for_otgr.asmx HTTP/1.1");
ТекстФайл.ДобавитьСтроку("Content-Type: text/xml; charset=utf-8");
ТекстФайл.ДобавитьСтроку("Content-Length: length");
ТекстФайл.ДобавитьСтроку(ТекстXML);
ТекстФайл.Записать(ФайлТелаЗапроса, КодировкаТекста.UTF8);

ФайлТелаЗапроса = ПолучитьИмяВременногоФайла();
ФайлРезультата = ПолучитьИмяВременногоФайла();

ТекстФайл.Записать(ФайлТелаЗапроса, КодировкаТекста.UTF8);
Соединение.ОтправитьДляОбработки(ФайлТелаЗапроса, "/asup_rus/WebServiceLoadDistr/Service_for_otgr.asmx", ФайлРезультата);


При отправке из 1С пишет ошибку: Ошибка при вызове метода контекста (ОтправитьДляОбработки): Ошибка доступа к файлу '/asup_rus/WebServiceLoadDistr/Service_for_otgr.asmx'
1 Tonik992
 
23.10.19
17:33
Первый раз вижу 3 параметра в ОтправитьДляОбработки()
2 Ёпрст
 
23.10.19
18:00
(0) а там точно такой синтаксис ?
ОтправитьДляОбработки(<HTTPЗапрос>, <ИмяВыходногоФайла>, <Источник>, <АдресРесурса>, <Заголовки>)
3 VS-1976
 
23.10.19
18:03
Ошибка доступа к файлу

Это означает что нет доступа к скрипту. Проверь тупо в IE доступ к ресурсу "руками".
4 VS-1976
 
23.10.19
18:04
Соединение =  Новый HTTPСоединение("asup.konti.com",,,);

У тебя доступ тупо по HTTP? Точно не нужно по HTTPS
5 Tonik992
 
23.10.19
18:06
(4) Это не ошибка доступа к файлу.
Это он неверно использует процедуру ОтправитьДляОбработки()

Там 2 параметра.
https://forum.infostart.ru/forum9/topic152774/
6 VS-1976
 
23.10.19
18:08
(5) Я уже посмотрел. Там через HTTPЗапрос... В общем товарищь не умеет их готовить походу...
7 pechkin
 
23.10.19
18:31
но зачем соап руками обрабатывать? может лучше через веб сервис?
8 Сияющий в темноте
 
23.10.19
18:41
(7)а потом в параметрах будет то,что 1с послать не может.
9 palsergeich
 
23.10.19
19:02
(7) потому что 1С не поурывает 100% стандарта SOAP, и собирать руками приходитсячаще, чем хотелось бы
10 palsergeich
 
23.10.19
19:02
(9) Ну по крайей мере я надеюсь чтьо у автора причина только в этом, а не потому что лень)
11 palsergeich
 
23.10.19
19:06
(0) ЭЭЭ ты и заголовки пост запроса в текст запроса запихнул?)
12 palsergeich
 
23.10.19
19:07
ТекстФайл.ДобавитьСтроку("POST /asup_rus/WebServiceLoadDistr/Service_for_otgr.asmx HTTP/1.1");
ТекстФайл.ДобавитьСтроку("Content-Type: text/xml; charset=utf-8");
ТекстФайл.ДобавитьСтроку("Content-Length: length");
это заголовки и они не сюда записываются и не так
13 palsergeich
 
23.10.19
19:15
Эта штука плаформой добавляется сама.
POST /asup_rus/WebServiceLoadDistr/Service_for_otgr.asmx HTTP/1.1

Эти штуки добавляются при заполнении коллекции Заголовки Новый HTTPЗапрос(<АдресРесурса>, <Заголовки>)
ТекстФайл.ДобавитьСтроку("Content-Type: text/xml; charset=utf-8");
ТекстФайл.ДобавитьСтроку("Content-Length: length");
14 palsergeich
 
23.10.19
19:19
Соединение =  Новый HTTPСоединение("asup.konti.com",,,);
Заголовки = новый соответствие;
Заголовки.Вставить("Content-Type", "charset=utf-8"")
Запрос = Новый HTTPЗапрос("/asup_rus/WebServiceLoadDistr/Service_for_otgr.asmx", Заголовки);
Запрос.УстановитьтелоИзСтроки(ТекстXML);
HTTPответ = Соединение.ОтправитьДляОбработки(Запрос);

Заголовок Content-Length ставится платформой самостоятельно и крайне не рекомендую пытаться его устанавливать самостоятельно.
15 palsergeich
 
23.10.19
19:21
(14) Там в синтакс помошнике прекрасный пример есть, А тут идет изобретение очередного лисапеду
16 palsergeich
 
23.10.19
19:40
Заголовки = новый соответствие;
Заголовки.Вставить("SOAPAction", "https://asup.konti.com/HelloWorld";);
Заголовки.Вставить("Content-Type", "charset=utf-8"") // хотя странно почему не application/xml
17 НеПапоКарло
 
24.10.19
09:52
palsergeich, большое спасибо.
Но к сожалению конструкция "Новый HTTPЗапрос" не доступна на платформе 8.1.
18 Ёпрст
 
24.10.19
10:00
(17) делай тогда через winhttpreqest и не парься
19 dezss
 
24.10.19
10:03
(17) Пришел узнать насколько здесь люди умеют мысли читать?))))
20 НеПапоКарло
 
24.10.19
10:09
Ресурс "/asup_rus/WebServiceLoadDistr/Service_for_otgr.asmx" закрыт логином и паролем. Подскажите каким образом правильно будет в запросе прописать логин и пароль?
21 Ёпрст
 
24.10.19
10:14
(20) либо через строку соединения, либо через заголовки
22 oleg_km
 
24.10.19
10:16
(20) Все зависит от того, каким способом реализована авторизация. Если стандартным, то может даже можно в HTTPСоединение прописать
23 Tonik992
 
24.10.19
10:56
(17)
8.1 платформа.. за что?
24 palsergeich
 
24.10.19
11:17
(17) то есть о том что платформа 81 я должен был телепатически догадаться?(
25 Bober
 
24.10.19
15:58
(0) (17)
если это 8.1, то попробуй использовать параметр заголовки как соотвествие из примера (16):

Соединение =  Новый HTTPСоединение("asup.konti.com");

Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", "text/xml; charset=utf-8");
Заголовки.Вставить("SOAPAction", "https://asup.konti.com/HelloWorld";);

ФайлТелаЗапроса = ПолучитьИмяВременногоФайла();
ТекстФайл = Новый ТекстовыйДокумент;
ТекстФайл.УстановитьТекст(ТекстXML);
ТекстФайл.Записать(ФайлТелаЗапроса, КодировкаТекста.UTF8);

ФайлРезультата = ПолучитьИмяВременногоФайла();

Соединение.ОтправитьДляОбработки(ФайлТелаЗапроса, "/asup_rus/WebServiceLoadDistr/Service_for_otgr.asmx", ФайлРезультата, Заголовки);
26 НеПапоКарло
 
25.10.19
12:58
В итоге сделал через MSXML2, вариант через Новый HTTPСоединение не смог добиться чтобы в итоговом запросе 1С 8.1 отправляла: "Authorization:", 1С отправляла "Proxy-Authorization:"

Функция ОтправитьHttpPost(ЗапросXML, СтруктураОбмена, ВариантОтправки)

MSXML = Новый COMОбъект("MSXML2.XMLHTTP");
    
ИмяСервера     = "https://asup.konti.com/"; + ВариантОтправки;
АдресСервиса     = "https://asup.konti.com/asup_rus/WebServiceLoadDistr/Service_for_otgr.asmx";;
Хост         = "http://asup.konti.com";;
    
MSXML.open("POST", АдресСервиса, 0);
MSXML.setRequestHeader("Host",                 Хост);
MSXML.setRequestHeader("Content-Type",         "text/xml; charset=utf-8");
MSXML.setRequestHeader("SOAPAction",         ИмяСервера);
MSXML.setRequestHeader("Authorization",     "Basic dfdsl;fkdsl;fkfsdl;fdsf"); Логин:Пароль - закодирован Base64
MSXML.setRequestHeader("Content-Length",     "length");
    
MSXML.send(ЗапросXML);
        
ОтветПолучен = Ложь;
Для НомерЦикла = 1 по 100 Цикл
    Если MSXML.readyState > 3 Тогда
        ОтветПолучен = Истина;
        Прервать;
    КонецЕсли;      
КонецЦикла;  
    
Если ОтветПолучен Тогда
        
    Возврат MSXML.responseXML.xml
        
Иначе

    Возврат Неопределено;
        
КонецЕсли;

КонецФункции
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.