Žiadosti HTTP od 1s. Spracovanie presmerovania požiadavky http

Žiadosti HTTP od 1s.  Spracovanie presmerovania požiadavky http
Žiadosti HTTP od 1s. Spracovanie presmerovania požiadavky http

Pri vývoji postupu na odosielanie informácií z 1C na stránku s verziou platformy 8.3.9.2170 som narazil na problém: vývojár stránky mi poskytol možnosť zaznamenať potrebné informácie iba pomocou požiadavky HTTP pomocou metódy PUT.

Bez rozmýšľania som načrtol jednoduchý kód:

Connection = New HTTPConnection("www.mysite.ru"); Hlavičky = Nová zhoda; Hlavičky["Content-Type"] = "application/x-www-form-urlencoded"; Request = New HTTPRequest("/api/order_items/93076?order_item=30", Hlavičky); Connection.Write(Žiadosť);

Na základe výsledkov vykonania malo byť množstvo tovaru prijatého na sklade zadané v príslušnom riadku objednávky kupujúceho na webovej stránke.

Ako ste však už zrejme pochopili, nič sa nestalo. Keď som sa uistil, že na stránke nie sú žiadne chyby (odoslaním podobnej žiadosti prostredníctvom doplnku Chrome), spustil som ju na svojom lokálny počítač webový server a začali experimentovať.

Okamžite sa vyjasnila zvláštna vec: Vyššie uvedený kód negeneruje PUT, ale požiadavku HEAD!

V protokoloch Apache som videl nasledovné:

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

Bol som trochu prekvapený (koniec koncov, v príručke bolo uvedené PUT čiernobielo), ale nebol som zmätený - metódu môžete zavolať priamo:

Connection.CallHTTPMetoda("PUT",Požiadavka);

Protokoly ukazujú to isté:

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

"Možno robím niečo zle?" - položil som si otázku. Ale na internete ani v manuáloch neboli žiadne náznaky. No metódu vedeckého tykania ešte nikto nezrušil. Na začiatok som sa pokúsil urobiť toto:

Connection.CallHTTPMetoda("fyvfyv",Požiadavka);

V protokoloch, ktoré som dostal:

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

Je zvláštne, že to znamená, že 1C nahrádza metódu PUT konkrétne (prečo sa to 1C nepáčilo?).

Po niekoľkých ďalších pokusoch som prišiel na toto:

Connection.CallHTTPMetoda("PUT",Požiadavka);

V protokoloch, ktoré som dostal:

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

A táto možnosť už na stránke fungovala a všetci boli spokojní.

Navrhol správnejšie riešenie problému: musíte zadať telo požiadavky, akékoľvek telo, dokonca aj prázdne. Napríklad táto možnosť bude fungovať:

Connection = New HTTPConnection("www.mysite.ru"); Hlavičky = Nová zhoda; Hlavičky["Content-Type"] = "application/x-www-form-urlencoded"; Request = New HTTPRequest("/api/order_items/93076?order_item=30", Hlavičky); Request.SetBodyFromString("",TextEncoding.UTF8, UseByteOrderMark.NotUse); Connection.Write(Žiadosť);

A pravdepodobne je celkom správne odovzdať samotné hodnoty parametrov v tele žiadosti.

Záver je nasledovný: platforma 1C považuje požiadavku PUT bez tela za chybnú a nahrádza metódu HEAD.

Je zvláštne, že 1C nesleduje požiadavku POST bez tela a nezmení ju na GET, skontroloval som to pre zábavu.

Ako by povedal známy Vovochka zo známeho vtipu: "Kde je logika?"

Dúfam, že moja publikácia niekomu ušetrí niekoľko hodín života pri hľadaní odpovede. =)))

Na platforme 1C Enterprise 8.3 bolo možné vytvárať služby HTTP

Pomocou vstavaného jazyka teraz môžete vygenerovať odpoveď na požiadavku. Zároveň máte pohodlný prístup k telu, hlavičkám a zdrojovému riadku žiadosť a je tiež možné generovať kód, telo a hlavičky odpoveď podľa vlastného uváženia.

V porovnaní s webovými službami dostupnými na platforme SOAP majú služby HTTP množstvo výhod:

  • Jednoduché programovanie klienta takýchto služieb;
  • Potenciálne menej prenesených dát;
  • Potenciálne nižšie výpočtové zaťaženie;
  • HTTP služby sú orientované na „zdroje“, zatiaľ čo služby SOAP sú orientované na „akciu“.

Databáza demonštruje implementáciu http služieb

http-servis Zoznam faktúr

Služba http používa šablóny URL a implementuje spracovanie vlastností ParametersURL objekt HTTPServiceRequest
IN v tomto príklade ukazuje, ako môžete vytvoriť rozpernú základňu medzi pracovnou základňou a firemnou webovou stránkou
Vytvorí sa pripojenie k demo databáze “ Riadenie obchodu 11“, v ktorom najskôr pre adresár „Protistrany“ musíte nastaviť ďalšiu vlastnosť s názvom Webové heslo , kde uložíme prístupové heslo.
Nasledujúce parametre adresy URL budú odoslané na žiadosť http: TIN ako prihlasovacie meno a heslo.
Pri spracovaní požiadavky sa vytvorí spojenie cez ComConnector s UT (brzdy sú zaručené) a odtiaľ sa odoberie vzorkovanie
Nepredstieram, že toto riešenie je rýchle alebo bezpečné, je to len príklad

Takže. V strome metadát sa objavila nová vetva – služby HTTP
Tvoríme nová služba, uveďte jej názov a koreňovú adresu URL (zoznam)
Na volanie našej služby http sa použije koreňová adresa URL
Potom pridajte šablónu adresy URL do služby http, pričom ako šablónu uveďte „/(Prihlásenie)/(Heslo).
Táto šablóna vám umožní získať zodpovedajúcu štruktúru parametrov a ich hodnoty v parametroch URL pri spracovaní požiadavky http.
Teraz do našej šablóny adresy URL pridáme metódu s názvom „get“, ako metódu http vyberte možnosť GET
Otvorte obslužný program a napíšte kód
Obsluha metódy je funkcia, ktorá musí vrátiť hodnotu typu HTTPServiceResponse

Stav objednávky služby http

Príklad implementuje spracovanie premenných prenášaných metódou POST a vygenerovanie odpovede vo forme HTML stránky.
Dáta sú tentokrát vzorkované z databázy, kde sa nachádza hs, takže funguje podstatne rýchlejšie ako predchádzajúca služba http.
Pri realizácii pracovný systém má zmysel vytvárať objekty v databáze (pomocou služby) a konfigurovať migráciu údajov zo zdrojovej databázy (napr. proces na pozadí). Pri spracovaní http požiadavky sa vzorkovanie vykonáva priamo z databázy, v ktorej sa nachádza.

Publikácia

Existuje veľa informácií o inštalácii a konfigurácii webového servera.
Použil som zostavu httpd-2.2.25-win32-x86-openssl-0.9.8y.exe odtiaľto
Inštalované metódou „Ďalší-Ďalší-Dokončiť“ :)
Zverejňovanie http služieb sa nachádza na tom istom mieste, kde bolo a je a nie je zvlášť odlišné zverejňovanie webových služieb.
Po nainštalovaní webového servera v režime „Konfigurátor“ prejdite do ponuky „Správa“ – „Publikovanie na webovom serveri“
Na karte „Služby HTTP“ nastavte názov publikácie, webový server, adresár publikácií a označte naše služby (v mojom prípade je to názov „web“, webový server Apache 2.2)
Pri publikovaní sa príslušné bloky automaticky zapíšu do konfiguračného súboru httpd.conf a server sa reštartuje (pri prvom zverejnení)
Volanie služby http
Príklad: http://mysite/web/hs/list, Kde
moja stránka– adresa servera (ak je webový server nainštalovaný lokálne, môžete použiť 127.0.0.1)
web– meno uvedené pri zverejnení (alias)
hs– povinný segment cesty, ktorý informuje server, že bude fungovať so službami http
zoznam– koreňová adresa URL webovej služby

Testovanie

Zoznam faktúr

http://127.0.0.1/web/hs/list/7705260681/pswMP (Nezabudnite nastaviť dodatočnú vlastnosť v UT pre heslo)

Predpokladá sa, že na prístup do registra dokumentov používateľ používa priamy odkaz obsahujúci INN a heslo

Stav objednávky

http://127.0.0.1/web/hs/check

Žiadosť a odpoveď sú umiestnené na rovnakej adrese URL. Pri vstupe na stránku sa spustí metóda GET, ktorá vráti html formulár

Po kliknutí na „Skontrolovať“ sa číslo objednávky odošle metódou POST na rovnakú URL, odpoveď sa vráti s rovnakým formulárom požiadavky, doplnená o údaje o požadovanej objednávke.

V priloženom súbore je stiahnutie databázy pre 1C 8.3. Konfigurácia obsahuje 2 http služby (z publikácie), nastavenie komunikačného spojenia s demo databázou UT 11 a dokument „Objednávka“.

Čo je potrebné na spustenie a testovanie

  • webový server
  • akýkoľvek webový prehliadač
  • aktuálne vydanie1C: Podnik 8.3

Od druhej verzie 8 platformy majú používatelia a vývojári možnosť použiť požiadavku http priamo v 1C. Program podporuje dva typy požiadaviek:

  • požiadavky POST;
  • žiadosti GET.

Vzniklo teda dosť šikovný nástroj na výmenu údajov a interakciu s webovými službami a službami bežiacimi cez http.

žiadosť GET

Samozrejme, najjednoduchšie príklady použitia dotazov ilustrujú ich možnosti oveľa lepšie ako mnohé riadky popisu. Tak skúsme:

  1. Vezmime si telo hlavnej stránky nášho webu;
  2. Budeme pracovať na presmerovaní požiadavky;
  3. Zoberme si obrázok zo stránky.

Získava sa telo stránky

Začnime niečím jednoduchým. Na obr.

Výsledkom vykonania tejto časti kódu je pomerne veľký text, ktorého záverečná časť je znázornená na obr.

Obr.2

V prvom riadku kódu vytvoríme objekt pripojenia k zdroju http. Objekt môže obsahovať nasledujúce vlastnosti:

  • Server - reťazec pripojenia obsahujúci adresu servera;
  • Port – obsahuje číslo označujúce port servera, v závislosti od typu pripojenia môžete zadať 80 nezabezpečené spojenia alebo 443 pre zabezpečené SSL.
  • Používateľské meno – uvádza sa, ak sa vyžaduje autorizácia na serveri;
  • Heslo – heslo používateľa na zadanom zdroji;
  • Proxy – môže obsahovať objekt typu InternetProxy, ktorý sa označuje, keď sa na komunikáciu so serverom používa proxy;
  • Zabezpečené pripojenie – predvolená hodnota je FALSE, prepnutie na TRUE znamená použitie protokolu https.

Okrem toho má objekt HTTPConnection svoje vlastné metódy, ktoré vám umožňujú úplnejšie opísať algoritmus vykonávania obslužného programu:

  • CallHTTPmethod – obsahuje dva požadované parametre, HTTPmethod a HTTPrequest, podporuje možnosť zapísať telo odpovede do súboru špecifikovaného v treťom parametri;
  • Write – pomocou požiadavky PUT odošle dáta na server;
  • Modify – modifikuje objekt spracovaním PATCH požiadaviek;
  • SendForProcessing – metóda označujúca použitie požiadavky POST, tak ako všetky predchádzajúce metódy, musí obsahovať text požiadavky a môže tiež prenášať adresu súboru odpovedí na zaznamenávanie údajov;
  • Prijať - to bude podrobnejšie popísané nižšie;
  • GetHeadings je ďalšia metóda, ktorá bude použitá v článku;
  • Delete je vlastne požiadavka na odstránenie, ktorá odstráni zdroj odovzdaný v požiadavke zo servera.

V druhom riadku vytvoríme požiadavku na vybranú stránku, text našej požiadavky obsahuje jednu lomku, čo znamená, že chceme dostávať domovskej stránke. Ak by za lomkou nasledoval akýkoľvek výraz, napríklad „strana2“ alebo „novinky“, dostali by sme inú stránku.

Tretí riadok vykoná našu požiadavku na server.

Vo štvrtom ukazujeme výsledok.

Spracovanie presmerovania požiadavky http

Predstavme si situáciu, že potrebujeme programovo dostať výsledok hľadania cez ktorýkoľvek vyhľadávač tlačidlom „Požiadavky za 1 s“. Časť kódu potrebná na prístup k GOOGLE je znázornená na obr. 3

Obr.3

Okrem štruktúr, ktoré už poznáme, sú tu hlavičky a stavový kód. Poďme sa s nimi vysporiadať.

Stavový kód – štandardná hodnota špecifikovaná v „Žiadosti o komentáre“, môže nadobudnúť nasledujúce hodnoty:

  1. Ak je všetko v poriadku, hodnota sa vráti v rozsahu od 100 do 299;
  2. V prípade presmerovania sa vráti kód v rozsahu od 300 do 399, v našom prípade úspešné trvalé presmerovanie na zdroj určí kód 301;
  3. Ak sú v požiadavke chyby, parameter nadobudne hodnotu od 400 do 499;
  4. Hodnota v rozsahu 500-599 označuje problémy so serverom.

Každá strana má nadpis, v texte ktorého možno rozlíšiť niekoľko parametrov (obr. 4):

  1. Schéma pripojenia (všetko, čo je pred dvoma lomkami „//“);
  2. Riadok adresy pripojenia;
  3. Používateľské meno a heslo;
  4. Port a hostiteľ na pripojenie.

Práve toto rozdelenie vykonáva funkcia SplitAddressLine. Takto prijatý Nová adresa, môžeme si stránku uložiť do počítača a otvoriť ju v predvolenom prehliadači (postup GetPage).

Obr.5

Nie sú tu žiadne nové funkcie ani spôsoby práce s požiadavkami, my vlastne tvoríme Textový dokument z tela stránky a spustite stránku v prehliadači.

Súbor umiestnime do koreňového adresára jednotky D a nazveme ho test.

Obrázok berieme zo stránky

Vzniká prirodzená otázka: ak nepotrebujeme celú stránku, ale potrebujeme získať iba jej jednotlivé prvky, dá sa to urobiť a ako? Áno môžeš. Programový kód, ktorý vám to umožňuje, je uvedený na obr

Obr.6

Ako vidíte na obrázku, v tele požiadavky máme kód prvku štruktúry lokality, ktorý potrebujeme prijať. Táto časť nebola v našom predchádzajúcom popise a musíme sa pri tomto bode zastaviť podrobnejšie.

Použili sme prehliadač Opera na prístup na stránku. Obsahuje pre nás jeden dôležitý nástroj, keď kliknete kliknite pravým tlačidlom myši myšou na prvok, môžete zavolať obsahové menu, jednou z položiek je „Zobraziť kód prvku“.

Práve vďaka nemu môžeme získať adresu, ktorá bude použitá v požiadavke Obr.7.

POST žiadosť

Na rozdiel od jednoduchých požiadaviek Get majú POST http požiadavky textové telo, ktoré môže byť uložené buď vo forme obyčajného textu, alebo vo forme súborov s príponou xml, soap, json. V sieti je pomerne veľa nástrojov na vytváranie textov požiadaviek, ktoré umožňujú ladiť a monitorovať vykonávanie určitých požiadaviek.

V 1C má objekt požiadavky HTTP na spustenie požiadavky so špecifickým textom procedúru SetBodyFromString.