Изпратете заявка за публикация от 1s 8.3.

Печат (Ctrl+P)

Втората част може да се види

Главна информация

В платформен вариант 8.3.5.1068 , публикуван през септември 2015 г., се появи механизъм за интегриране на 1C с външни програми чрез технология REST интерфейс. Платформата използва протокола OData като протокол за достъп. Това е отворен уеб протокол за заявки и актуализиране на данни. Тя ви позволява да манипулирате данни, като използвате HTTP команди като заявки. Отговорите във версия 8.3.5.1068 могат да бъдат получени само във формат Atom/XML . Въпреки това, започвайки от версия 8.3.8.1652 през август 2017 г., се появи втора опция за получаване на данни във формат JSON (JavaScript Object Notation). . В сравнение с XML, той е лесен за четене от хората и заема по-малко място. Освен това всички браузъри имат вградени инструменти за работа с JSON.

Работата с протокола OData на платформата 1C: Enterprise може да бъде намерена в книгата 1C: Ръководство за разработчици в глава 17 Механизми за интернет услуги, параграф 17.2.1 Стандартен интерфейс OData.Можете също да разгледате примери за разширяване на поддръжката на OData протокол,

Използвайте предимство REST интерфейс. заключава, че за да се получи достъп до системни данни от външно приложение, не е необходима модификация на кода на решението на приложението (например, ако решението на приложението се поддържа). За да получите този достъп, трябва да публикувате приложението на уеб сървъра по специален начин и да посочите кои конфигурационни обекти ще се използват по този начин. След това системи на трети страниможе да получи достъп до вашето приложение чрез HTTP заявки.

Публикуването на стандартния интерфейс OData се извършва с помощта на диалоговия прозорец за публикуване на уеб сървъра (Администриране - Публикуване в уеб сървър) и описан в книгата 1C: Enterprise 8.3. "Ръководство на администратора".
важно!За да могат конфигурационните обекти да станат достъпни чрез стандартния интерфейс OData, трябва да активирате това чрез метода на глобалния контекст Задайте състав на StandardODataInterface().
Механизмът за задаване на състава на обектите, налични чрез стандартния интерфейс OData, може да се направи във формуляра външна обработка. Това не изисква модификация на приложеното решение.

За взаимодействие с външен REST уеб сървър от 1C:Enterprise се използват наличните в платформата инструменти за работа с HTTP: обекти HTTPConnection, HTTPRequest и HTTPResponse.

В тази поредица от статии ще покажа примери за типични операции, използващи съответния HTTP метод;

  • Събиране на данни – метод ВЗЕМЕТЕ;
  • Създаване на обект – метод ПУБЛИКУВАНЕ;
  • Актуализация на данните: метод КРЕПКА- в този случай можете да посочите само тези свойства, които трябва да бъдат актуализирани; метод СЛАГАМ– в този случай е необходимо да се уточнят всички свойства на обекта;
  • Изтриване на данни - метод ИЗТРИЙ.

1. Примери за събиране на данни. HTTP метод GET

Сървърът ще бъде база данни, публикувана на уеб сървъра с името webbuh(Демо-база „Счетоводство на предприятието 3.0“). Ще използвам формата JSON като формат за обмен на данни. Повече информация за работа с JSON е написана в наличната документация. За да получавате данни от сървъра чрез метода GET HTTP, трябва да създадете обект Четене на JSONза последователно четене на JSON данни от файл или низ. За да организирате последователно записване на обекти и текстове на сървъра с помощта на метода POST PATCH PUT HTTP, трябва да създадете обект Запис в JSON.Имайте предвид, че методът DELETE не изисква JSON.

Като илюстрация на поточно четене и писане на JSON при достъп до интерфейса REST, ще извикам следната персонализирана функция с общо предназначение Обадете се на HTTPMethodOnServer :

&На сървъра // <Описание функции>// // Настроики: // - Низ, съдържащ името на HTTP метода за заявката ("POST"."PATCH", "PUT" ,"GET","DELETE" // - HTTPConnection обект //<АдресРесурса>- Низ от http ресурса, към който ще бъде изпратена HTTP заявката. //<ОтправляемыеДанные>- Структура или кореспонденция, съдържаща данни, изпратени до посочения адрес за обработка // към сървъра, използвайки посочения HTTP метод "POST" или "PATCH" или "PUT" // Върната стойност: // Структура на отговора на сървъра в зависимост от HTTPMethod// Функция CallHTTPMethodOnServer(HTTPMethod,HTTPConnection,ResourceAddress,SubmittedData =недефиниран) // Създаване на HTTP заявказаглавия = нов мач(); Заглавия. Вмъкване("Content-Type", "application/json"); HTTP заявка = Нова HTTP заявка ( ResourceAddress, Headers ); // Писане на Json за създаване и актуализиране на данниАко HTTPMethod="POST" или HTTPMethod="PATCH" или HTTPMethod="PUT" Тогава JSONWriter = NewJSONWriter ; Параметри на JSON = Ново Параметри JSON записи(Wrap JSON.Auto,"",True ); JSON Write.SetString(Параметри JSON); WriteJSON(WriteJSON, Изпратени данни ); // Изпратени данниизисква се в този случай StringForBody = WriteJSON.Close(); RequestHTTP.SetBodyFromString(StringForBody, EncodingText.UTF8, Използване на ByteOrderMark. Не използвайте); EndIf; // Извикване на метод HTTPConnection ResponseHTTP = HTTPConnection.CallHTTPMethod(HTTPMethod, HTTP Request) ; Структура на отговора= Нова структура; Структура на отговора.Insert ("Код на състоянието ", HTTP Response.StatusCode); // Прочетете JSON само за GET методАко HTTPМетод="GET"Тогава опит за четене на JSON = Ново четене на JSON; Отговор на сървъра = ResponseHTTP.GetBodyAsString("UTF-8"); ReadJSON.SetString(ServerResponse); Съвпадение = ReadJSON(ЧетенеJSON,Вярно ); Response Structure.Insert("Отговор на сървъра",Кореспонденция) ; Структура на отговора.Вмъкнете (" Отговорът на сървъра не е дешифриран", ServerResponse); Изключение Доклад(Описание на грешка()); Връщане Недефинирано;Край на опита; край ако; Връщане Структура на отговора ; Крайни функции // Извикване на HTTPMethodOnServer()

За да получите от сървъра във формат JSON, при достъп до REST интерфейса на приложението трябва да посочите в адреса на ресурса $format=json.Или посочете MIME тип приложение/jsonв заглавието:

заглавия = нов мач(); Headers.Insert("Content-Type", "приложение/json") ; ResourceAddress =" webbuh/odata/standard.odata/ ?$format=json" HTTP заявка = Ново HTTPRequest(ResourceAddress, Headers);

Функция за глобален контекст ReadJSON(ReadJSON, True )

  • Ако стойността на втория параметър е зададена на True, четене на обекта JSONще бъде направено в Кореспонденция.Ако е зададено на False, обектите ще бъдат прочетени в обект от тип Структура.
  • Когато десериализирате JSON обекти в структура, имайте предвид изискванията за ключ на структурата. Ако десериализацията на обект открие име на свойство, което не е валидно за структурен ключ, ще бъде хвърлено изключение.

1. 1 Конфигуриране на параметри на HTTP връзка

За да организирам клиентската част от взаимодействието с външен REST уеб сървър, създадох клиентска конфигурация, базирана на BSP от нулата. В тази конфигурация създадох директория за настройка на параметрите на връзката (вижте Фиг. 1)

Фигура 1 Справочно ръководство за конфигуриране на параметри на HTTP връзка към външен IB през интерфейса за почивка

След натискане на бутона Проверете отговора на сървъра извиква се процедура, чрез която клиентът ще се опита да получи отговора на сървъра. Програмен кодпроцедурата е написана по-долу:

&OnClient Процедура CheckConnection(Command) Address = Object.ServerAddress; Потребител = Object.User; Парола = Object.Password; Базово име = Обект.Име; Порт = ? (Object.Port<>0,Object.Port,80); HTTPConnection = Ново HTTP връзка (адрес, порт, потребител, парола); ResourceAddress = BaseName + "/odata/standard.odata/ $метаданни "; //Извикване на персонализирана функция Структура на отговора= Б callHTTPMethodOnServer("ВЗЕМИ", HTTP връзка, адрес на ресурс) ; Ако Структура на отговора <> Недефиниран Тогава General PurposeClientServer.InformUser("Код на състоянието "+Структура на отговора.Код на състоянието); край ако; EndProcedure

Целта на тази процедура е сервизна проверка идали потребителят е въвел правилно параметрите на връзката. За да направите това, просто направете GET заявка:
HTTPConnection.CallHTTPMethod( "ВЗЕМИ", Заявка HTTP);
използвайки адрес на ресурс:
Адрес на ресурса =BaseName+ /odata/standard.odata/ “;
Можете също да проверите работата на услугата в браузъра, като използвате
URL адрес
http://host/WebBuh/odata/standard.odata. В резултат на такова запитване се получава само списък с обекти. За получаване пълно описаниестандартен интерфейс OData (списък на налични обекти, техните атрибути и функции под формата на XML-
документ.) трябва да направите GET заявка, като използвате параметъра $метаданни. URL адрес http://host/WebBuh/odata/standard.odata/$metadata. Подробно описаниеДокументът е достъпен на http://www.odata.org/documentation/ (на английски).
Можете да получите отговори във формата Atom/XMLили JSON. Кодовете за състояние на HTTP отговор могат да се видят Отговори в диапазоните:

  • 100-199 – информационни отговори, показващи, че заявката на клиента е приета и се обработва.
  • 200-299 – означава, че заявката на клиента е обработена успешно.
  • 300-399 означава, че заявката е неуспешна и клиентът трябва да предприеме някакво действие, за да удовлетвори заявката.
  • 400-499 - информира за грешки от страна на клиентското приложение. Тези кодове може също да показват, че се изисква допълнителна информация от клиента.
  • 500-599 - Информира за грешка от страна на сървъра, показва, че сървърът е срещнал грешка и вероятно няма да може да изпълни заявката на клиента.

1.2 Търсене на обект по ID

Следната функция е предназначена за търсене на директория или документ по уникален идентификатор на сървъра. Ако обектът бъде намерен, тогава функцията връща стойността на низа на идентификатора (Ref_Key), в противен случай връща недефиниран.Следните параметри се предават на функцията:

  • HTTPConnection – Обект от тип HTTPConnection
  • PublishName - Името на публикуваната сървърна база данни
  • Елемент - идентификатор на обекта, например, Каталог_Организацииили Документ_ - директория на Организацията.
  • Идентификатор - идентификаторът на обекта, който трябва да се търси на сървъра, например, Организация.UniqueIdentifier()
Функция &AtServer SearchObjectBy GUID (HTTPConnection,PublicationName,Element,UniqueIdentifier) GUID = низ (уникален идентификатор); // конвертиране в низ ResourceAddress = + Елемент+ "(guid""+ GUID+ "")?$format=json" ; Структура на отговора = БcallHTTPMethodOnServer("ВЗЕМИ" , HTTP връзка, адрес на ресурс) ; Ако Структура на отговора .StatusCode >= 400 Тогава //General PurposeClientServer.NotifyUser(Element+ "Error"+ResponseStructure.StatusCode+ //General PurposeClientServer.NotifyUser(ResponseStructure.ServerResponseUndecoded); връща недефиниран; EndIf ; Съвпадение = Структура на отговора. ResponseServer a; Масив = Съвпадение ["стойност"]; If Array = Undefined Then Return Match ["Ref_Key"] Else Return Array ["Ref_Key"]; EndIf; Крайни функции

Параметър Адрес на ресурса се използва за достъп до услугата REST. За да проверите работата на услугата, можете да посочите ресурса в браузъра по този начин

http://(WebServerAddress)/(PubName)/odata/standard.odata/(Item)?(Параметри) ,Където

  • Адрес на уеб сървъра– Адресът на уеб сървъра, където е публикувана услугата, например Localhost
  • Име Публикации- Име информационна базапосочени към момента на публикуване на решението
  • /odata/standard.odata/ – Знак за достъп до стандартния OData интерфейс
  • елемент – идентификатор на ресурс или предварително дефинирани ресурси. Например Catalog_Account(guid'value').
  • Настроики– ресурсни параметри. Използва се например за избор в приетите за HTTP заявки: ?key=value&key2=value2

1.3 Търсене на обект чрез полета за търсене

Следната дефинирана от потребителя функция е предназначена за търсене на обект по полета за търсене в случай, че обектът е по идентификационен номер. Низ на функционален обект Ref_Key-идентификационен номер.

&AtServer функция P searchObjectBySearchFields(HTTPConnection,PublicationName, Element,SearchFields)Условие = "" ;За всяка ключова стойност от цикъла на полето за търсене Състояние = Състояние + KeyValue.Key+"eq""+ KeyValue.Value+ "" и "; EndCycle; RequestText =Lion(Условие, StrLength(Условие)-5); // премахнете последните 5 знака Адрес на ресурса= Име на публикация+ "/odata/standard.odata/" +Елемент+ "?$filter=" + RequestText+ "&$format=json& $select=Ref_Key" ; // Извикване на моя персонализирана функция Структура на отговора= callHTTPMethodOnServer( "ВЗЕМИ",HTTPConnection,ResourceAddress);Ако Структура на отговора .StatusCode >= 400 Тогава //ClientServer с общо предназначение.InformUser(Element+ "Error"+Response Structure.StatusCode); //ClientServer с общо предназначение.NotifyUser(ResponseStructure.ServerResponseUndecrypted); връща недефиниран; EndIf; Съвпадение = Структура на отговора. ResponseServer a; Масив = Съвпадение ["стойност" ]; If Array = Undefined Then Return Match ["Ref_Key" ] В противен случай Върнете Array ["Ref_Key" ]; EndIf; Крайни функции

Както се вижда от тялото на процедуратаП SearchObjectByFieldsSearch, изборът започва с ключова дума$филтърв адреса на ресурса. Формален параметърПолета за търсене -това е кореспонденция, която съдържа имената и стойностите на атрибутите.

Обърнете внимание, че името на детайлите понякога не е очевидно. Трябва да се помни, че за директории:

  • код - код,
  • Описание
  • DeletionMark - знак за изтриване,
  • IsFolder - знак за група,
  • Parent_Key е родителят.
  • Ако атрибутът е от референтен тип, добавете суфикса _Key към името му, например Contractor_Key.

За документи:

  • Номер – номер на документ,
  • Дата - дата на документа.

Операции за логически избор

  • eq - Равно на; /Catalog_Cities?$filter=Име eq ‘Главен’;
  • ne - Не е равно; /Catalog_Cities?$filter=Име ne ‘Перм’;
  • gt - повече; /Catalog_Products?$filter=Цена gt 10;
  • ge - По-голямо или равно на; /Catalog_Products?$filter=Цена ge 10;
  • lt - по-малко; /Catalog_Products?$filter=Цена lt 10;
  • le - По-малко или равно на; /Catalog_Products?$filter=Цена le 10;
  • или - Логическо ИЛИ; /Каталог_ Продукти ?$filter= Цена lt 10 или Цена gt 100;
  • и - Логическо И; / Каталог _Продукти?$ filter =Цена g t 10 и Цена l t 100;
  • не - Отрицание; /Каталог_ Продукти ?$filter=not (Цена eq 10);

Обърнете внимание също, че стойността на действителния параметър елемент(или обект)), който предавам на функцията формира се по следното правило:

PrefixName_ConfigurationObjectName_SuffixName.

Използвайки стандартния интерфейс OData, можете да получите достъп до следните обекти ( Префикс на име):

  • Справочник – Каталог;
  • Документ - Документ;
  • Журнал за документи - DocumentJournal;
  • Константа - Константа;
  • План за обмен - ExchangePlan;
  • Сметкоплан - ChartOfAccounts
  • План тип изчисление - ChartOfCalculationTypes;
  • Диаграма на видовете характеристики - ChartOfCharacteristicTypes;
  • Информационен регистър - InformationRegister;
  • Регистър за натрупване - AccumulationRegister;
  • Изчислителен регистър - CalculationRegister;
  • Счетоводен регистър - AccountingRegister;
  • Бизнес процес – BusinessProcess;
  • Задача - Задача.

ConfigurationObjectName- свойство "Име" на конфигурационния обект, както е зададено в конфигуратора.

Име на суфикса- необходим за указване на името на ресурса, по избор, може да приема следните стойности:

  • Името на табличната част на обекта;
  • Име виртуална масаобект;
  • RowType - ред от табличната част на обекта;
  • RecordType е един запис в регистъра.

Опции за достъп до ресурси

След като формирате името на ресурса, трябва да дефинирате параметрите за достъп до ресурса, напр. ?$filter= Значение &$формат=json& $select= Ref_Key ,

  • $филтър- избор при получаване на данни
  • $формат- определя формата на върнатите данни,
  • $избор- изброяване на свойствата на обекта, които ще бъдат включени в резултата от заявката;
  • $метаданни- връща описание на стандартния OData интерфейс (използван без посочване на суфикс на име, пример е в едно от изображенията по-горе);
  • $отгоре- ограничаване на броя на върнатите записи;
  • $пропускане- премахва посочения брой записи от резултата на заявката;
  • $брой- връща броя на записите в селекцията на заявката;
  • $inlinecount=allpage(=няма)- добавя информация за броя на записите към резултата от заявката
  • $orderby=<Реквизит1>възходящ,<Реквизит2>дес- сортиране на резултата от заявката
  • allowOnly- само позволено (използвано без знака "$").

1.4 Вземете масив от записи в регистъра с информация

Нека да разгледаме пример за получаване на масив от записи на регистъра с информация за пълното име на лицата, например историята на промяна на пълното име индивидуален

Име Публикации ="WebBuh";Елемент = "InformationRegister_Name of Individuals"; Период = Недефиниран; ReferenceType данни= Нова структура (); д DataReferenceType.Insert("PhysicalPerson",PhysicalPerson_Key); DataNonReferenceType= Нова структура (); DataNonReferenceType.Insert("PhysicalPerson_Type", "StandardODATA.Catalog_PhysicalPersons") Масив = GetRegisterRecordSetDetails(HTTP връзка, име на публикация, елемент, период, DimensionsReferenceType, Измервания на Non-ReferenceType)

Тялото на функцията GetRegisterRecordSet, която се извиква в този пример, е показано по-долу.

Функция &AtServer GetRegisterRecordSetDetails(HTTP връзка, име на публикация, елемент, период = недефиниран, DimensionsReferenceType= Недефиниран, Измервания на Non-ReferenceType= недефинирано) RequestText = "" ;Ако точка<>Недефиниран Тогава FormattedPeriod= Формат (Точка, "DF=yyyy-MM-ddTHH:mm:ss"); QueryText = "Период = дата и час""+ FormattedPeriod + """ ; EndIf; Ако DimensionsReferenceType <>Undefined След това за всяка KeyValue на DimensionsReferenceTypeЦикъл компресиран =? ( ValueFilled(QueryText), "," ,""); QueryText = Текст на заявка+ Захранван + KeyValue.Key+ "=guid(""+ KeyValue.Value+ "")"; EndCycle; EndIf; If Измервания на Non-ReferenceType<> Недефиниран ТогаваЗа всяка KeyValue на Измервания на Non-ReferenceType Цикъл Питане = ? ( ValueFilled(QueryText), "," ,""); QueryText = QueryText + Query+ К keyValue.Key + "=" + KeyValue.Value; EndCycle; EndIf; ResourceAddress = PublicationName + " /odata/standard.odata/" + Елемент + "("+ QueryText + + ") ?$format=json"; // Извикване на моя персонализирана функция Структура на отговора = Обадете се на HTTPMethodOnServer("GET",HTTP връзка,адрес на ресурс); Ако Структура на отговора.StatusCode >= 400 Тогава//ClientServer с общо предназначение.InformUser(Element+ "Error"+Response Structure.StatusCode); //ClientServer с общо предназначение.NotifyUser(ResponseStructure.ServerResponseUndecrypted); връща недефиниран; EndIf; Съвпадение = 0

При разработването на процедурата за изпращане на информация от 1C към сайта с платформа версия 8.3.9.2170 се натъкнах на проблем: разработчикът на сайта ми даде възможност да записвам необходимата информациясамо с помощта на HTTP заявка, използваща метода PUT.

Без да мисля два пъти, скицирах прост код:

Connection = New HTTPConnection("www.mysite.ru"); Заглавки = Ново съвпадение; Headers["Content-Type"] = "application/x-www-form-urlencoded"; Заявка = Нов HTTPRequest("/api/order_items/93076?order_item=30", Headers); Connection.Write(Request);

Въз основа на резултатите от изпълнението съответният ред на поръчката на купувача на уебсайта трябва да посочи количеството стоки, получени в склада.

Но както вероятно вече разбрахте, нищо не се случи. След като се уверих, че няма грешки в сайта (като изпратих подобна заявка през приставката за Chrome), пуснах моя локален компютъруеб сървър и започна да експериментира.

Веднага стана ясно нещо странно: горният код генерира не PUT, а HEAD заявка!

В регистрационните файлове на Apache видях следното:

127.0.0.1 - - "HEAD /api/order_items/93076?order_item=30 HTTP/1.1"

Бях малко изненадан (в края на краищата беше написано черно на бяло в ръководството PUT), но не бях на загуба - в края на краищата можете да извикате метода директно:

Connection.CallHTTPMethod("PUT",Request);

Дневниците са същите:

127.0.0.1 - - "HEAD /api/order_items/93076?order_item=30 HTTP/1.1"

— Може би правя нещо нередно? – зададох си въпрос. Но в интернет и в ръководствата нямаше улики. Е, никой все още не е отменил метода на научното мушкане. Като начало се опитах да направя следното:

Connection.CallHTTPMethod("fwfw", Request);

В регистрационните файлове, които получих:

127.0.0.1 - - "?????? /api/order_items/93076?order_item=30 HTTP/1.1"

Любопитно е, че това означава, че 1C специално замества метода PUT (защо той не угоди на 1C?).

След още няколко опита стигнах до това:

Connection.CallHTTPMethod("PUT", Request);

В регистрационните файлове, които получих:

127.0.0.1 - - "ПОСТАВЕТЕ /api/order_items/93076?order_item=30 HTTP/1.1"

И тази опция вече работи на сайта и всички останаха доволни.

Той предложи по-правилно решение на проблема: трябва да посочите тялото на заявката, всяко, дори празно. Например това би свършило работа:

Connection = New HTTPConnection("www.mysite.ru"); Заглавки = Ново съвпадение; Headers["Content-Type"] = "application/x-www-form-urlencoded"; Заявка = Нов HTTPRequest("/api/order_items/93076?order_item=30", Headers); Query.SetBodyFromString("", TextEncoding.UTF8, UseByteOrderMark.Don't Use); Connection.Write(Request);

И вече е съвсем правилно, вероятно, самите стойности на параметрите да се прехвърлят в тялото на заявката.

Изводът е следният: платформата 1C счита PUT заявка без тяло за погрешна и замества метода с HEAD.

Любопитно е, че 1C не проследява POST заявка без тяло и не я превръща в GET, беше проверено в името на спортния интерес.

Както би казал добре познатият Вовочка от известния виц: "Къде е логиката?".

Надявам се публикацията ми да спести на някого няколко часа живот в търсене на отговор. =)))

Започвайки от втората версия на платформата 8, потребителите и разработчиците имат възможност да използват директно в 1C http заявка. Програмата поддържа два вида заявки:

  • POST заявки;
  • GET заявки.

По този начин беше създаден доста удобен инструмент за обмен на данни и взаимодействие с уеб услуги и услуги, които работят чрез http.

GET заявка

Разбира се, най-простите примери за използване на заявки илюстрират техните възможности много по-добре от много редове за описание. Така че нека опитаме:

  1. Вземете тялото на главната страница на нашия сайт;
  2. Нека изработим пренасочването на заявката;
  3. Ще вземем снимката от сайта.

Получаване на тялото на сайта

Да започнем просто. На фиг..

Резултатът от изпълнението на тази част от кода е доста голям текст, чийто последен раздел е показан на фиг.2.

Фиг.2

В първия ред на кода създаваме обект за връзка с http ресурс. Един обект може да съдържа следните свойства:

  • Сървър - низ за връзка, съдържащ адреса на сървъра;
  • Порт - съдържа номер, указващ порта на сървъра, по подразбиране, в зависимост от типа връзка, можете да посочите 80 за несигурни връзки или 443 за защитен SSL.
  • Потребителско име - посочва се, ако се изисква оторизация на сървъра;
  • Парола – парола на потребителя на посочения ресурс;
  • Прокси - може да съдържа обект от типа InternetProxy, посочен, когато се използва прокси за комуникация със сървъра;
  • SecureConnection - по подразбиране е FALSE, превключването на TRUE показва използването на https протокола.

В допълнение, обектът HTTPConnection има свои собствени методи, достъпът до които ви позволява да опишете по-пълно алгоритъма за изпълнение на манипулатора:

  • CallHTTPmethod - съдържа два задължителни параметъра HTTPmethod и HTTPrequest, поддържа възможност за запис на тялото на отговора във файла, посочен в третия параметър;
  • Write - изпраща данни към сървъра чрез PUT заявка;
  • Modify – модифицира обект чрез обработка на PATCH заявки;
  • SendForProcessing - методът, указващ използването на POST заявка, както във всички предишни методи, трябва да съдържа текста на заявката, може също да изпрати адреса на файла с отговори за запис на данни;
  • Get - повече за това ще бъде обсъдено по-долу;
  • GetHeaders е друг метод, който ще се използва в цялата статия;
  • Изтриването всъщност е заявка за изтриване, която премахва ресурса, предаден в заявката от сървъра.

Във втория ред създаваме заявка към избрания сайт, текстът на нашата заявка съдържа една наклонена черта, което означава, че искаме да получим начална страница. Ако някой израз следва наклонената черта, например "page2" или "news", ще получим друга страница.

Третият ред изпълнява нашата заявка към сървъра.

В четвъртата показваме резултата.

Обработка на пренасочване на http заявка

Представете си ситуация, в която трябва програмно да получим резултат от търсене чрез any търсачкачрез клавиша "Заявки за 1s". Разделът от код, необходим за достъп до GOOGLE, е показан на фиг. 3

Фиг.3

Тук, в допълнение към вече познатите ни конструкции, има Headers и StatusCode. Нека се справим с тях.

StatusCode - стандартната стойност, посочена в "Искане за коментари", може да приема следните стойности:

  1. Ако всичко е наред, ще бъде върната стойност в диапазона от 100 до 299;
  2. В случай на пренасочване ще бъде върнат код в диапазона от 300 до 399, в нашия случай успешното постоянно пренасочване към ресурса ще се определя от кода 301;
  3. В случай на грешки в заявката, параметърът ще приеме стойност от 400 до 499;
  4. Стойност в диапазона 500-599 показва проблеми със сървъра.

Всяка страница има заглавие, в текста на което могат да се разграничат няколко параметъра (фиг. 4):

  1. Електрическа схема (всичко до две наклонени черти "//");
  2. Адресен низ за връзка;
  3. Потребителско име и парола;
  4. Порт и хост за свързване.

Именно тази разбивка се извършва от функцията BreakAddressString. След като получихме нов адрес, можем да запазим страницата на нашия компютър и да я отворим в браузъра по подразбиране (процедура GetPage).

Фиг.5

Няма нови функции и начини за работа със заявки, ние всъщност създаваме Текстов документот тялото на сайта и стартирайте страницата в браузъра.

Поставяме файла в корена на D устройството и го наричаме test.

Получаване на изображение от сайта

Възниква естествен въпрос: ако не се нуждаем от целия сайт, а само от отделните му елементи, възможно ли е да направим това и как? Да, можеш. Програмният код, който ви позволява да направите това, е показан на фиг. 6

Фиг.6

Както можете да видите от фигурата, в тялото на заявката имаме кода на елемента от структурата на сайта, който трябва да получим. Тази част не беше в предишното ни описание и трябва да се спрем на тази точка по-подробно.

Използвахме браузъра Opera за достъп до сайта. Той има един важен инструмент за нас, когато щракнете Кликнете с десния бутонмишката върху елемент, можете да извикате контекстно меню, един от елементите на който е "Преглед на кода на елемента".

Благодарение на него можем да получим адреса, който ще се използва в заявката Фиг.7.

POST заявка

За разлика от простите Get заявки, POST http заявките имат текстово тяло, което може да се съхранява както в обикновен текстов вид, така и като файлове с разширения xml, soap, json. Мрежата разполага с много инструменти за създаване на текстове на заявки, които ви позволяват да отстранявате грешки и да наблюдавате изпълнението на определени заявки.

В 1C, за да стартира заявка с конкретен текст, обектът на HTTP заявка има процедура SetBodyFromString.



Зареждане...
Връх