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

POST запрос, что не так?

POST запрос, что не так?
Я
   НеПапоКарло
 
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'
 
 
   Tonik992
 
1 - 23.10.19 - 17:33
Первый раз вижу 3 параметра в ОтправитьДляОбработки()
   Ёпрст
 
2 - 23.10.19 - 18:00
(0) а там точно такой синтаксис ?
ОтправитьДляОбработки(<HTTPЗапрос>, <ИмяВыходногоФайла>, <Источник>, <АдресРесурса>, <Заголовки>)
   VS-1976
 
3 - 23.10.19 - 18:03
Ошибка доступа к файлу

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

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

Там 2 параметра.
https://forum.infostart.ru/forum9/topic152774/
   VS-1976
 
6 - 23.10.19 - 18:08
(5) Я уже посмотрел. Там через HTTPЗапрос... В общем товарищь не умеет их готовить походу...
   pechkin
 
7 - 23.10.19 - 18:31
но зачем соап руками обрабатывать? может лучше через веб сервис?
   Сияющий в темноте
 
8 - 23.10.19 - 18:41
(7)а потом в параметрах будет то,что 1с послать не может.
   palsergeich
 
9 - 23.10.19 - 19:02
(7) потому что 1С не поурывает 100% стандарта SOAP, и собирать руками приходитсячаще, чем хотелось бы
   palsergeich
 
10 - 23.10.19 - 19:02
(9) Ну по крайей мере я надеюсь чтьо у автора причина только в этом, а не потому что лень)
   palsergeich
 
11 - 23.10.19 - 19:06
(0) ЭЭЭ ты и заголовки пост запроса в текст запроса запихнул?)
   palsergeich
 
12 - 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");
это заголовки и они не сюда записываются и не так
   palsergeich
 
13 - 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");
   palsergeich
 
14 - 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 ставится платформой самостоятельно и крайне не рекомендую пытаться его устанавливать самостоятельно.
   palsergeich
 
15 - 23.10.19 - 19:21
(14) Там в синтакс помошнике прекрасный пример есть, А тут идет изобретение очередного лисапеду
   palsergeich
 
16 - 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 и не парься
   dezss
 
19 - 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) либо через строку соединения, либо через заголовки
   oleg_km
 
22 - 24.10.19 - 10:16
(20) Все зависит от того, каким способом реализована авторизация. Если стандартным, то может даже можно в HTTPСоединение прописать
   Tonik992
 
23 - 24.10.19 - 10:56
(17)
8.1 платформа.. за что?
   palsergeich
 
24 - 24.10.19 - 11:17
(17) то есть о том что платформа 81 я должен был телепатически догадаться?(
   Bober
 
25 - 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 
        
Иначе

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

КонецФункции


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