Имя: Пароль:
1C
 
Помогите разобраться с POST запросом до сайта zakupki.gov.ru
0 SergejM
 
15.06.11
11:48
по документации имеем пример POST запроса:

POST /pgz/services/upload HTTP/1.1
Content-Type: multipart/form-data; boundary=---------------------------7db10b11c0824
Host: zakupki.gov.ru
Content-Length: (размер содержимого)
Connection: Keep-Alive
Cache-Control: no-cache

-----------------------------7db10b11c0824
Content-Disposition: form-data; name="login"

(имя пользователя)
-----------------------------7db10b11c0824
Content-Disposition: form-data; name="password"

(пароль)
-----------------------------7db10b11c0824
Content-Disposition: form-data; name="document"; filename="(имя файла)"
Content-Type: text/xml

(XML-документ)
-----------------------------7db10b11c0824


Имеем код:
   ИмяФайлаОтвета = КаталогВременныхФайлов() + "post_out.txt";;
   ИмяФайлаОтправки = КаталогВременныхФайлов() + "post.txt";
   
   
   Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()),"-","");
   
   ФайлОтправки = Новый ЗаписьТекста(ИмяФайлаОтправки, КодировкаТекста.UTF8, Символы.ПС, ЛОЖЬ);
   ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
   ФайлОтправки.ЗаписатьСтроку("Content-Disposition: form-data; name=""login""" + Символы.ПС);
   ФайлОтправки.ЗаписатьСтроку(Логин);
   ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
   ФайлОтправки.ЗаписатьСтроку("Content-Disposition: form-data; name=""password""" + Символы.ПС);
   ФайлОтправки.ЗаписатьСтроку(Пароль);
   ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
   ФайлОтправки.ЗаписатьСтроку("Content-Disposition: form-data; name=""document""; filename=""exp_"+Формат(ОбщегоНазначения.СервернаяТекущаяДата(),"ДФ=yyyyMMddhhmmss")+"_01.xml.zip""");
   ФайлОтправки.ЗаписатьСтроку("Content-Type: text/xml" + Символы.ПС);
   
   ТекстЗапроса = Новый ТекстовыйДокумент();
   ТекстЗапроса.Прочитать(ПолноеИмяФайла);
   СодержимоеФайла = ТекстЗапроса.ПолучитьТекст();
   
   ФайлОтправки.ЗаписатьСтроку(СодержимоеФайла);
   ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
   ФайлОтправки.Закрыть();

   ТекстЗапроса = Новый ТекстовыйДокумент();
   ТекстЗапроса.Прочитать(ПолноеИмяФайла);
   СодержимоеФайла = ТекстЗапроса.ПолучитьТекст();
   
   ФайлОтправки = Новый Файл(ИмяФайлаОтправки);
   РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
   
             Попытка
                       MSXML = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
           Исключение    
                       Сообщить("Не удалось инициализировать Microsoft XML");
           КонецПопытки;
           // Подключение к серверу  
           Попытка
                       // Подключение к серверу  
                       MSXML.open("POST", "https://zakupki.gov.ru/pgz/services/upload", 0);
           Исключение  
                       // Если произойдет ошибка выводятся данные об ошибке.  
                       Сообщить("Не удалось инициализировать Microsoft XML");
           КонецПопытки;
           
             // Установить заголовок запроса

           // Выполнить запрос  

           Попытка

               // Установить заголовок запроса  

               MSXML.setRequestHeader("Content-Type","multipart/form-data; boundary=--" + Boundary);
               MSXML.setRequestHeader("Host", "zakupki.gov.ru");        
               MSXML.setRequestHeader("Content-Length", РазмерФайлаОтправки);
               MSXML.setRequestHeader("Connection", "Keep-Alive");
               MSXML.setRequestHeader("Cache-Control", "no-cache");

               // Выполнить запрос  

               Запрос = Новый ТекстовыйДокумент();
               Запрос.Прочитать(ФайлОтправки.ПолноеИмя);
               СодержимоеЗапроса = Запрос.ПолучитьТекст();
                       
               MSXML.send(СодержимоеЗапроса);
               //                      

               // Получить ответ  

               ОтвXML = MSXML.responsetext;

               Сообщить("ответ запроса: " + ОтвXML);
           Исключение
               #Если Клиент Тогда
                   Сообщить("Неудачная попытка соединения: " + ОписаниеОшибки());
               #Иначе
                   ЗаписьЖурналаРегистрации("HTTPСоединение", УровеньЖурналаРегистрации.Ошибка, , , "Неудачная попытка соединения: " + ОписаниеОшибки());
               #КонецЕсли
               Возврат;    
               
           КонецПопытки;    

ВОПРОС:
Почему сервер возвращает ошибку - ответ запроса: Error 500: javax.servlet.ServletException: Параметр document является обязательным
1 SergejM
 
15.06.11
11:54
к сожалению не могу подправить сообщение чтоб было по понятней и красивее :(
2 Evpatiy
 
15.06.11
11:57
(0) Свяжись с тех. поддержкой приемника. Пусть скинут шаблон запроса или описалово. Ошибку же они выдают.
3 SergejM
 
15.06.11
11:59
(2) шаблон указан сверху сообщения (0)
тех поддержка своеобразная и отвечает не часто, поэтому пытаюсь отправить методом тыка.
4 SergejM
 
15.06.11
12:00
Шаблон запроса:

POST /pgz/services/upload HTTP/1.1
Content-Type: multipart/form-data; boundary=---------------------------7db10b11c0824
Host: zakupki.gov.ru
Content-Length: (размер содержимого)
Connection: Keep-Alive
Cache-Control: no-cache

-----------------------------7db10b11c0824
Content-Disposition: form-data; name="login"

(имя пользователя)
-----------------------------7db10b11c0824
Content-Disposition: form-data; name="password"

(пароль)
-----------------------------7db10b11c0824
Content-Disposition: form-data; name="document"; filename="(имя файла)"
Content-Type: text/xml

(XML-документ)
-----------------------------7db10b11c0824
5 SergejM
 
15.06.11
12:02
параметр "document" является обязательным для заполнения как и пароль с логином, но вроде я его передаю в теле сообщения :(
6 H A D G E H O G s
 
15.06.11
12:02
(0) Так разработчики борятся со шпиенами и прочими несогласными.

Зачем тебе туда стучаться?
7 Grusswelle
 
15.06.11
12:03
Навальному софтину на 1С строчишь? ;-)
8 sapphire
 
15.06.11
12:19
9 SergejM
 
15.06.11
12:24
(6) работа такая :)
(7) нет
(8) в чем моя ошибка подскажи!
этот документ я читал, и старался сделать по нему
10 sapphire
 
15.06.11
12:26
(9) Надо устанавливать значение заголовков.
И, файло, которое отправляешь - это XML.
И, судя по описанию, передается в заголовке.
11 SergejM
 
15.06.11
12:41
(10) в заголовке ...

типа так? :
MSXML.setRequestHeader("Content-Disposition", "form-data; name=""login""" + Символы.ПС + Логин);

если да то :  Ошибка при вызове метода контекста (SetRequestHeader): Неизвестная ошибка
12 SergejM
 
15.06.11
12:42
и вообще это как то противоречит http://pro1c.org.ua/index.php?showtopic=939
хотя я конечно не уверен.
13 Segate
 
15.06.11
12:43
уже 13 постов. Навального упоминали уже? )
14 SergejM
 
15.06.11
12:44
(13) Упоминали, хоть проясните кто это?
15 SergejM
 
15.06.11
13:05
:(
16 sdaf
 
15.06.11
14:27
(14) надежда хомяков
17 oleg_km
 
15.06.11
18:20
В последнем
-----------------------------7db10b11c0824

по-моему должны быть две черточки

-----------------------------7db10b11c0824--

типа закрывающая скобка
18 SergejM
 
16.06.11
09:19
(17) ну вообще то это шаблон из документации, но все равно попробую
19 oleg_km
 
16.06.11
09:33
напиши, что получится
20 SergejM
 
21.06.11
09:26
Да пока ничего
написали в тех поддержку
пробовали прогой которая умеет напрямую запросы слать, таже фигня лезет