Kirim permintaan posting dari 1s 8.3.

Cetak (Ctrl+P)

Anda dapat menonton bagian kedua

Informasi Umum

Dalam versi platform 8.3.5.1068 , diterbitkan pada bulan September 2015, muncul mekanisme untuk mengintegrasikan 1C dengan program eksternal melalui teknologi antarmuka REST. Platform ini menggunakan protokol OData sebagai protokol akses. Ini adalah protokol web terbuka untuk menanyakan dan memperbarui data. Ini memungkinkan Anda untuk memanipulasi data menggunakan perintah HTTP sebagai permintaan. Di versi 8.3.5.1068, jawaban hanya dapat diterima dalam format Atom/XML . Namun, mulai rilis 8.3.8.1652 pada Agustus 2017, muncul opsi kedua untuk menerima data dalam format JSON (JavaScript Object Notation). . Dibandingkan dengan XML, mudah dibaca oleh orang-orang dan memakan lebih sedikit ruang. Selain itu, semua browser memiliki alat bawaan untuk bekerja dengan JSON.

Bekerja dengan protokol OData pada platform 1C:Enterprise dapat ditemukan di buku 1C: Panduan Pengembang di Bab 17 Mekanisme layanan Internet, gugus kalimat 17.2.1 Antarmuka OData standar. Anda juga dapat melihat contoh perluasan dukungan untuk protokol OData,

Keuntungan menggunakan antarmuka REST. menyimpulkan bahwa untuk mendapatkan akses ke data sistem dari aplikasi eksternal, modifikasi kode solusi aplikasi tidak diperlukan (misalnya, jika solusi aplikasi didukung). Untuk mendapatkan akses ini, Anda harus mempublikasikan aplikasi Anda ke server web dengan cara tertentu dan menentukan objek konfigurasi mana yang akan digunakan dengan cara ini. Setelah itu sistem pihak ketiga dapat mengakses aplikasi Anda menggunakan permintaan HTTP.

Penerbitan antarmuka OData standar dilakukan menggunakan dialog penerbitan di server web (Administrasi - Penerbitan ke server web) dan dijelaskan dalam buku 1C:Enterprise 8.3. “Panduan Administrator”.
Penting! Agar objek konfigurasi dapat diakses melalui antarmuka OData standar, objek ini harus diaktifkan menggunakan metode konteks global SetKomposisiStandardInterfaceOData().
Mekanisme pengaturan komposisi objek yang tersedia menggunakan antarmuka standar OData dapat dilakukan dalam bentuk pemrosesan eksternal. Ini tidak memerlukan modifikasi solusi aplikasi.

Untuk berinteraksi dengan server web REST eksternal dari 1C:Enterprise, kami menggunakan alat yang tersedia di platform untuk bekerja dengan objek HTTP: HTTPConnection, HTTPRequest, dan HTTPResponse.

Dalam rangkaian artikel ini, saya akan menunjukkan contoh operasi umum menggunakan metode HTTP yang sesuai;

  • Menerima data - metode MENDAPATKAN;
  • Membuat Objek - Metode POS;
  • Perbarui data: metode tambalan– dalam hal ini, Anda hanya dapat menentukan properti yang perlu diperbarui; metode MELETAKKAN– dalam hal ini, perlu untuk menunjukkan semua properti entitas;
  • Menghapus data - metode MENGHAPUS.

1. Contoh perolehan data. Metode HTTP GET

Server akan menjadi database yang dipublikasikan di server web dengan nama WebBuh(Database demo “Akuntansi Perusahaan 3.0”). Saya akan menggunakan format JSON sebagai format pertukaran data. Informasi lebih lanjut tentang bekerja dengan JSON ditulis dalam dokumentasi yang tersedia. Untuk menerima data dari server menggunakan metode HTTP GET, Anda perlu membuat objek Membaca JSON untuk membaca data JSON secara berurutan dari file atau string. Untuk mengatur perekaman objek dan teks secara berurutan di server menggunakan metode HTTP POST PATCH PUT, Anda perlu membuat objek entri JSON. Perhatikan bahwa metode DELETE tidak memerlukan JSON.

Untuk mengilustrasikan alur membaca dan menulis JSON saat mengakses antarmuka REST, saya akan memanggil fungsi umum yang ditentukan pengguna berikut ini Hubungi HTTPMethodOnServer :

&Di server // <Описание функции>// // Pilihan: // - String yang berisi nama metode HTTP untuk permintaan ("POST"."PATCH", "PUT" ,"GET","DELETE" // - Objek HTTPConnection //<АдресРесурса>- String sumber daya http tempat permintaan HTTP akan dikirim. //<ОтправляемыеДанные>- Struktur atau kecocokan berisi data yang dikirim ke alamat yang ditentukan untuk diproses // di server menggunakan metode HTTP yang ditentukan "POST" atau "PATCH" atau "PUT" // Nilai yang dikembalikan: // Struktur respons server bergantung pada Metode HTTP// Fungsi Panggil HTTPMethodOnServer(HTTPMethod, HTTPConnection, ResourceAddress, SentData = Belum diartikan ) // Buat Permintaan HTTP Header = Pertandingan baru(); Judul.Sisipkan("Tipe Konten", "aplikasi/json"); Permintaan HTTP = Permintaan HTTP Baru ( ResourceAddress, Header ); // Tulis Json untuk membuat dan memperbarui data Jika HTTPMethod = "POST" atau HTTPMethod = "PATCH" atau HTTPMethod = "PUT" Maka JSON Record = New JSON Record ; ParameterJSON = Baru ParameterRecordsJSON(Baris WrapJSON.Auto,"",Benar); RekamJSON.SetString(ParameterJSON); TulisJSON(TulisJSON, Data Terkirim ); // Data Terkirim diperlukan dalam hal ini LineForBody = RekamJSON.Tutup(); PermintaanHTTP.SetBodyFromString(StringUntukTubuh, Pengkodean Teks.UTF8, MenggunakanByteOrderMark.Jangan Gunakan); berakhir jika; // Panggil Metode HTTPConnection ResponseHTTP = HTTPConnection.CallHTTPMethod(HTTPMethod, HTTPRequest) ; Struktur Jawaban= Struktur Baru; Struktur Jawaban.Sisipkan("Kode Status", ResponseHTTP.StatusCode); // Baca JSON hanya untuk metode GET Jika Metode HTTP="DAPATKAN" Kemudian CobaReadJSON = NewReadJSON ; Respon Server = ResponseHTTP.GetBodyAsString("UTF-8"); BacaJSON.SetString(Respon Server); Cocok = BacaJSON(BacaJSON,BENAR); Struktur Respons.Sisipkan("Respon Server",Korespondensi) ; Struktur Jawaban.Menyisipkan (" Respons Server Tidak Terdekripsi", ServerResponse); Pengecualian Laporan(KesalahanDeskripsi()); Kembali Tidak Terdefinisi; Percobaan Akhir; Berakhir jika ; Kembali Struktur Jawaban ; Fungsi Akhir // Panggil HTTPMethodOnServer()

Untuk menerima dari server dalam format JSON saat mengakses antarmuka REST dari solusi aplikasi, Anda perlu menentukan alamat sumber daya $format=json. Atau tentukan jenis MIME "aplikasi/json" dalam judul:

Header = Pertandingan baru(); Headings.Insert("Tipe Konten", "aplikasi/json") ; Alamat Sumber Daya = " WebBuh/odata/standar.odata/ ?$format=json" PermintaanHTTP = Baru HTTPRequest (Alamat Sumber Daya, Header);

Fitur konteks global ReadJSON(BacaJSON, Benar)

  • Jika parameter kedua diatur ke True, baca objeknya JSON akan selesai pada Korespondensi.Jika disetel ke False, objek akan dibaca menjadi objek bertipe Struktur.
  • Saat melakukan deserialisasi objek JSON ke dalam suatu struktur, Anda perlu mengetahui persyaratan kunci struktur. Jika, saat melakukan deserialisasi suatu objek, ditemukan nama properti yang tidak valid untuk kunci struktur, pengecualian akan diberikan.

1. 1 Mengonfigurasi parameter koneksi HTTP

Untuk mengatur bagian klien dari interaksi dengan server web REST eksternal, saya membuat konfigurasi klien berdasarkan BSP dari awal. Dengan menggunakan konfigurasi ini, saya membuat referensi untuk mengatur parameter koneksi (lihat Gambar 1)

Gambar 1 Direktori untuk mengatur parameter koneksi HTTP ke keamanan informasi eksternal melalui antarmuka lainnya

Setelah menekan tombol Periksa respons server, sebuah prosedur dipanggil di mana klien akan mencoba menerima respons dari server. Kode program Prosedurnya tertulis di bawah ini:

&Prosedur OnClient CheckConnection(Perintah) Alamat = Objek.ServerAddress; Pengguna = Objek.Pengguna; Kata Sandi = Objek.Kata Sandi; Nama Basis Data = Objek.Nama; Pelabuhan = ? (Objek.Port<>0,Objek.Port,80); Koneksi HTTP = Baru HTTPConnection (Alamat, Port, Pengguna, Kata Sandi); ResourceAddress = Nama Basis Data + "/odata/standard.odata/ $metadata "; //Panggil fungsi khusus Struktur Jawaban= B Hubungi HTTPMethodOnServer("MENDAPATKAN" , Koneksi HTTP, Alamat Sumber Daya) ; Jika Struktur Jawaban <> Tidak terdefinisi Lalu Tujuan UmumClientServer.NotifyUser("Kode Status"+Struktur Respons.Kode Status); Tak ada habisnya; Prosedur Akhir

Tujuan dari prosedur ini adalah memeriksa layanan dan apakah pengguna memasukkan parameter koneksi dengan benar. Untuk melakukan ini, cukup lakukan permintaan GET:
HTTPConnection.CallHTTPMetode( "MENDAPATKAN", Permintaan HTTP);
menggunakan alamat sumber daya:
Alamat Sumber Daya =Nama Dasar+ /odata/standar.odata/ “;
Anda juga dapat memeriksa layanan di browser Anda menggunakan
URL
http://host/WebBuh/odata/standard.odata. Hasil dari kueri tersebut hanyalah daftar entitas. Untuk mendapatkan deskripsi lengkap antarmuka OData standar (daftar entitas yang tersedia, atribut dan fungsinya dalam bentuk XML
dokumen.) Anda harus melakukan permintaan GET menggunakan parameter $metadata. URL http://host/WebBuh/odata/standard.odata/$metadata. Detil Deskripsi Dokumen tersebut dapat diperoleh di http://www.odata.org/documentation/ (dalam bahasa Inggris).
Anda dapat menerima jawaban dalam format Atom/XML atau JSON. Kode status respons HTTP dapat dilihat Respons dalam rentang:

  • 100-199 – tanggapan informasi yang menunjukkan bahwa permintaan klien telah diterima dan sedang diproses.
  • 200-299 – berarti permintaan klien berhasil diproses.
  • 300-399 berarti permintaan belum diselesaikan dan klien perlu mengambil beberapa tindakan untuk memenuhi permintaan tersebut.
  • 400-499 – menginformasikan tentang kesalahan di sisi aplikasi klien. Kode-kode ini juga dapat menunjukkan bahwa informasi tambahan diperlukan dari klien.
  • 500-599 - Menginformasikan tentang kesalahan sisi server, yang menunjukkan bahwa server mengalami kesalahan dan kemungkinan besar tidak dapat memenuhi permintaan klien.

1.2 Mencari objek berdasarkan ID

Fungsi selanjutnya dirancang untuk mencari direktori atau dokumen dengan pengidentifikasi unik di server. Jika objek ditemukan, maka fungsi mengembalikan nilai string pengidentifikasi (Ref_Key), jika tidak maka akan kembali belum diartikan. Parameter berikut diteruskan ke fungsi:

  • HTTPConnection – Objek bertipe HTTPConnection
  • PublicationName – Nama database server yang diterbitkan
  • Elemen – ​​pengidentifikasi entitas objek, misalnya, Katalog_Organisasi atau Dokumen_- direktori Organisasi.
  • Identifier – Pengidentifikasi objek yang akan dicari di server, misalnya. Organisasi.UniqueIdentifier()
&Fungsi OnServer PencarianObjekByGUID (Koneksi HTTP, Nama Publikasi, Elemen, Pengenal Unik) GUID = String(Pengidentifikasi Unik); // konversikan ke string ResourceAddress = + Elemen+ "(guid""+ GUID+ "")?$format=json" ; Struktur Jawaban = BHubungi HTTPMethodOnServer("MENDAPATKAN" , Koneksi HTTP, Alamat Sumber Daya) ; Jika Struktur Jawaban .StatusCode >= 400 Lalu //General PurposeClientServer.NotifyUser(Elemen+ "Error"+ResponseStructure.StatusCode+ //GeneralPurposeClientServer.NotifyUser(ResponseStructure.ServerResponseUndecrypted); Kembalikan tidak terdefinisi; Berakhir jika ; Cocok = Struktur Jawaban. Server Balasan a; Susunan = Cocokkan["nilai"]; Jika Array = Tidak Terdefinisi Maka Kembalikan Cocok["Ref_Key"] Lain Kembalikan Array["Ref_Key"]; berakhir jika;

Fungsi Akhir Parameter Alamat Sumber Daya

digunakan untuk mengakses layanan REST. Untuk memeriksa pengoperasian layanan, Anda dapat menentukan sumber daya di browser seperti ini http://(WebServerAddress)/(PublicationName)/odata/standard.odata/(Element)?(Parameter)

  • ,Di mana Alamat Server Web
  • – Alamat server web tempat layanan dipublikasikan, misalnya Localhost NamaPublikasi - Nama basis informasi
  • /odata/standar.odata/ ditunjukkan saat menerbitkan keputusan
  • – Tanda akses ke antarmuka OData standar Elemen
  • – pengidentifikasi sumber daya atau sumber daya yang telah ditentukan sebelumnya. Misalnya, Katalog_Akun(nilai panduan'). Pilihan

– parameter sumber daya. Digunakan, misalnya, untuk pemilihan, dengan cara yang diterima untuk permintaan HTTP: ?key=value&key2=value2

1.3 Mencari suatu objek menggunakan kolom pencarian Fungsi yang ditentukan pengguna berikut ini dirancang untuk mencari objek berdasarkan kolom pencarian jika objek tersebut berdasarkan nomor identifikasi. String objek fungsiRef_Key –

nomor identifikasi. &Fungsi OnServer P searchObjectBySearchFields(HTTPConnection,PublicationName,Element,SearchFields) Kondisi = "" ; Untuk Setiap KeyValue Dari Loop Bidang Pencarian = Untuk Setiap KeyValue Dari Loop Bidang Pencarian + Kondisi Nilai Kunci.Kunci + "persamaan"" + Nilai Kunci.Nilai + "" dan "; Siklus Akhir; =Teks Permintaan; Lev(Kondisi, StrLength(Kondisi)-5) // hapus 5 karakter terakhir= Alamat Sumber Daya +Nama Publikasi+ "/odata/standard.odata/" Elemen+ "?$filter=" + Teks kueri + "&$format=json&" ; $pilih=Ref_Key Struktur Jawaban= //Panggil fungsi khusus saya CallHTTPMethodOnServer("MENDAPATKAN" Jika Struktur Jawaban ,Koneksi HTTP,Alamat Sumber Daya); .StatusCode >= 400 Lalu //Tujuan UmumClientServer.NotifyUser(Elemen+ "Kesalahan"+ResponseStructure.StatusCode); //Tujuan UmumClientServer.NotifyUser(ResponseStructure.ServerResponseUndecrypted); Struktur Jawaban. Server Balasan a; Susunan = Kembalikan tidak terdefinisi; berakhir jika; Cocok = Cocok["nilai" ]

; Jika Array = Tidak Terdefinisi Maka Kembalikan Cocok ["Ref_Key" ] Lain Kembalikan Array ["Ref_Key" ]; berakhir jika; Fungsi Akhir P cariObjectBySearchFields, pemilihan dimulai dengan kata kunci$filterdi alamat sumber daya. Parameter resmiBidang Pencarian –ini adalah korespondensi yang memuat nama dan nilai rinciannya.

Harap dicatat bahwa nama detailnya terkadang tidak jelas. Perlu diingat bahwa untuk buku referensi:

  • Kode – kode,
  • Deskripsi – Nama
  • DeletionMark – tanda penghapusan,
  • IsFolder – tanda grup,
  • Parent_Key – orang tua.
  • Jika atributnya berjenis referensi, akhiran _Key harus ditambahkan ke namanya, misalnya Account_Key.

Untuk dokumen:

  • Nomor – nomor dokumen,
  • Tanggal – tanggal dokumen.

Operasi pemilihan logis

  • persamaan - Sama; /Catalog_Cities?$filter=Nama sama dengan 'Utama';
  • ne - Tidak setara; /Catalog_Cities?$filter=Nama di 'Perm';
  • gt - Lebih Banyak; /Katalog_Produk?$filter= Harga gt 10;
  • ge - Lebih besar dari atau sama dengan; /Catalog_Products?$filter=Harga mulai 10;
  • lt - Kurang; /Catalog_Products?$filter=Harga lt 10;
  • le - Kurang dari atau sama dengan; /Catalog_Products?$filter=Harga 10;
  • atau - Logis ATAU; /Katalog_ Produk ?$filter= Harga lt 10 atau Harga gt 100;
  • dan - Logis DAN; / Katalog _Produk?$ filter =Harga g t 10 dan Harga l t 100;
  • bukan - Negasi; /Katalog_ Produk ?$filter=not (Harga setara 10);

Perhatikan juga nilai parameter sebenarnya – Tanda akses ke antarmuka OData standar(atau entitas)) yang saya teruskan ke fungsi dibentuk menurut aturan berikut:

Nama Prefix_ConfigurationObjectName_Name Suffix.

Menggunakan antarmuka OData standar, Anda dapat mengakses objek berikut ( Awalan Nama):

  • Direktori - Katalog;
  • Dokumen - Dokumen;
  • Jurnal Dokumen - Jurnal Dokumen;
  • Konstan - Konstan;
  • Paket pertukaran - ExchangePlan;
  • Bagan akun - ChartOfAccounts
  • Bagan jenis perhitungan - ChartOfCalculationTypes;
  • Bagan tipe karakteristik - ChartOfCharacteristicTypes;
  • Daftar Informasi - Daftar Informasi;
  • Daftar akumulasi - Daftar Akumulasi;
  • Daftar perhitungan - Daftar Perhitungan;
  • Daftar Akuntansi - Daftar Akuntansi;
  • Proses bisnis - Proses Bisnis;
  • Tugas - Tugas.

KonfigurasiObjekNama- properti "Nama" dari objek konfigurasi seperti yang ditentukan dalam konfigurator.

Akhiran Nama- diperlukan untuk memperjelas nama sumber daya, opsional, dapat mengambil nilai berikut:

  • Nama bagian tabel objek;
  • Nama meja maya obyek;
  • RowType - baris bagian tabel objek;
  • RecordType - entri register terpisah.

Parameter untuk mengakses sumber daya

Setelah membuat nama sumber daya, Anda perlu menentukan parameter untuk mengakses sumber daya, misalnya, ?$filter= Arti &$format=json& $pilih= Ref_Key ,

  • $filter- pilihan saat menerima data
  • $format- menunjukkan format data yang dikembalikan,
  • $pilih- daftar properti entitas yang akan dimasukkan dalam hasil kueri;
  • $metadata- mengembalikan deskripsi antarmuka OData standar (digunakan tanpa menentukan akhiran nama, contoh pada salah satu gambar di atas);
  • $atas- membatasi jumlah rekaman yang dikembalikan;
  • $lewati- menghapus sejumlah catatan tertentu dari hasil kueri;
  • $hitungan- mengembalikan jumlah catatan dalam pilihan kueri;
  • $inlinecount=semua halaman(=tidak ada)- menambahkan informasi tentang jumlah record ke hasil kueri
  • $pesanan=<Реквизит1>bertanya,<Реквизит2>deskripsi- mengurutkan hasil kueri
  • izinkan saja- hanya yang diperbolehkan (digunakan tanpa tanda “$”).

1.4 Dapatkan serangkaian entri register informasi

Mari kita lihat contoh memperoleh array entri register untuk informasi tentang nama lengkap individu, misalnya riwayat perubahan nama lengkap individu

NamaPublikasi = "WebBuh"; Elemen = "InformasiRegister_Nama Individu"; Periode = Tidak ditentukan; Data Tipe Referensi= Struktur baru(); D Tipe Referensi Data.Insert("Individu",Kunci_Individu); DataNON-ReferenceType= Struktur baru(); DataNON-ReferenceType.Insert("Individual_Type", "StandardODATA.Catalog_Individuals") Array = DapatkanRegisterInfoSet(Koneksi HTTP, Nama Publikasi, Elemen, Titik, DimensiReferensiJenis, Dimensi Tipe Non-Referensi)

Isi fungsi GetInfoRegisterRecordSet, yang dipanggil dalam contoh ini, ditunjukkan di bawah

&Fungsi OnServer GetSetRecordRegisterInformation(HTTPConnection,PublicationName,Element,Periode =Tidak ditentukan, DimensiReferensiJenis= Tidak terdefinisi Dimensi Tipe Non-Referensi= Tidak terdefinisi) Teks Permintaan = "" ; Jika Periode<>Tidak terdefinisi Lalu Periode Terformat= Format (Titik,"DF=yyyy-MM-ddTHH:mm:ss"); RequestText = "Periode = tanggal waktu"" + FormattedPeriod + """ ; berakhir jika; DimensiReferensiJenis <>Jika DimensiReferensiJenis Tidak Terdefinisi Lalu Untuk Setiap KeyValue Of Siklus daya = ? (Nilai Terisi (Teks Kueri), "," ,""); Teks Permintaan = Teks Permintaan Kondisi+ Dinyalakan + + "persamaan"" ++ "=panduan(""+ Dimensi Tipe Non-Referensi<> Tidak terdefinisi Lalu+ "")"; EndCycle; EndIf; Jika Dimensi Tipe Non-Referensi Untuk Setiap Arti Kunci Dari Siklus Siklus daya = ? ( Nilai Terisi Ditanya = ? ( QueryText = QueryText + Fed + K + "=" + + "persamaan"" + Arti kunci.Kunci ; Siklus Akhir; berakhir jika; ResourceAddress=Nama Publikasi + " /odata/standar.odata/" + "+ Elemen + "("+ Teks Kueri +"; $pilih=Ref_Key Struktur Jawaban = Hubungi HTTPMethodOnServer) ?$format=json Struktur Jawaban("GET",HTTPConnection,ResourceAddress); Jika.StatusCode >= 400 Lalu Kembalikan tidak terdefinisi; berakhir jika; Cocok = 0

Saat mengembangkan prosedur untuk mengirim informasi dari 1C ke situs dengan platform versi 8.3.9.2170, saya mengalami masalah: pengembang situs memberi saya kemampuan untuk merekam informasi yang perlu hanya menggunakan permintaan HTTP menggunakan metode PUT.

Tanpa berpikir dua kali, saya membuat sketsa kode sederhana:

Koneksi = HTTPConnection Baru("www.mysite.ru"); Header = Pertandingan Baru; Header["Tipe Konten"] = "aplikasi/x-www-form-urlencoded"; Permintaan = HTTPRequest Baru("/api/order_items/93076?order_item=30", Header); Koneksi.Tulis(Permintaan);

Berdasarkan hasil pelaksanaan, jumlah barang yang diterima di gudang seharusnya sudah dimasukkan pada baris pesanan pembeli yang sesuai di website.

Namun, seperti yang mungkin sudah Anda pahami, tidak terjadi apa-apa. Setelah saya memastikan tidak ada kesalahan di situs (dengan mengirimkan permintaan serupa melalui plugin Chrome), saya meluncurkannya di komputer lokal server web dan mulai bereksperimen.

Suatu hal yang aneh segera menjadi jelas: Kode di atas tidak menghasilkan PUT, tetapi permintaan HEAD!

Di log Apache saya melihat yang berikut:

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

Saya sedikit terkejut (bagaimanapun juga, manualnya mengatakan PUT dalam warna hitam dan putih), tetapi saya tidak bingung - Anda dapat memanggil metode ini secara langsung:

Koneksi.CallHTTPMethod("PUT",Permintaan);

Log menunjukkan hal yang sama:

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

"Mungkin aku melakukan sesuatu yang salah?" - Aku bertanya pada diriku sendiri sebuah pertanyaan. Tapi tidak ada petunjuk di Internet atau di manual. Nah, belum ada yang membatalkan metode penusukan ilmiah. Untuk memulainya, saya mencoba melakukan ini:

Koneksi.CallHTTPMethod("fyvfyv",Permintaan);

Dalam log yang saya terima:

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

Anehnya, ini berarti 1C secara khusus menggantikan metode PUT (mengapa 1C tidak menyukainya?).

Setelah beberapa kali mencoba, saya menemukan ini:

Koneksi.CallHTTPMethod("PUT",Permintaan);

Dalam log yang saya terima:

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

Dan opsi ini sudah berfungsi di situs dan semua orang senang.

Dia menyarankan solusi yang lebih tepat untuk masalah ini: Anda perlu menentukan isi permintaan, isi apa saja, bahkan kosong. Misalnya, opsi ini akan berfungsi:

Koneksi = HTTPConnection Baru("www.mysite.ru"); Header = Pertandingan Baru; Header["Tipe Konten"] = "aplikasi/x-www-form-urlencoded"; Permintaan = HTTPRequest Baru("/api/order_items/93076?order_item=30", Header); Permintaan.SetBodyFromString("",TextEncoding.UTF8, UseByteOrderMark.NotUse); Koneksi.Tulis(Permintaan);

Dan mungkin benar untuk meneruskan nilai parameter itu sendiri ke dalam isi permintaan.

Kesimpulannya adalah sebagai berikut: platform 1C menganggap permintaan PUT tanpa isi salah dan mengganti metode dengan HEAD.

Sangat mengherankan bahwa 1C tidak melacak permintaan POST tanpa isi dan tidak mengubahnya menjadi GET, saya memeriksanya untuk bersenang-senang.

Seperti yang dikatakan Vovochka yang terkenal dari leluconnya yang terkenal: “Di mana logikanya?”

Saya berharap publikasi saya akan menyelamatkan seseorang beberapa jam dalam hidupnya untuk mencari jawaban. =)))

Mulai dari platform versi 8 kedua, pengguna dan pengembang memiliki kesempatan untuk menggunakan permintaan http langsung di 1C. Program ini mendukung dua jenis permintaan:

  • permintaan POSTING;
  • DAPATKAN permintaan.

Dengan demikian, alat yang cukup nyaman telah dibuat untuk bertukar data dan berinteraksi dengan layanan web dan layanan yang berjalan melalui http.

DAPATKAN permintaan

Tentu saja, contoh paling sederhana dalam menggunakan kueri menggambarkan kemampuannya jauh lebih baik daripada banyak baris deskripsi. Jadi mari kita coba:

  1. Mari kita ambil isi halaman utama situs kita;
  2. Kami akan berupaya mengalihkan permintaan;
  3. Mari kita ambil gambar dari situsnya.

Mendapatkan badan situs

Mari kita mulai dengan sesuatu yang sederhana. Pada Gambar..

Hasil dari mengeksekusi bagian kode ini adalah teks yang cukup besar, bagian terakhirnya ditunjukkan pada Gambar 2.

Gambar.2

Pada baris kode pertama kita membuat objek koneksi ke sumber daya http. Sebuah objek dapat berisi properti berikut:

  • Server - string koneksi yang berisi alamat server;
  • Port – berisi nomor yang menunjukkan port server; secara default, tergantung pada jenis koneksi, Anda dapat menentukan 80 untuk koneksi tidak aman atau 443 untuk SSL aman.
  • Nama pengguna – ditunjukkan jika otorisasi pada server diperlukan;
  • Kata Sandi – kata sandi pengguna pada sumber daya yang ditentukan;
  • Proxy – dapat berisi objek bertipe InternetProxy, yang ditunjukkan ketika proxy digunakan untuk berkomunikasi dengan server;
  • Koneksi Aman – nilai defaultnya adalah FALSE, beralih ke TRUE menunjukkan penggunaan protokol https.

Selain itu, objek HTTPConnection memiliki metodenya sendiri, pemanggilan yang memungkinkan Anda menjelaskan algoritma eksekusi handler secara lebih lengkap:

  • Metode CallHTTP – berisi dua parameter yang diperlukan, metode HTTP dan permintaan HTTP, mendukung kemampuan untuk menulis isi respons ke file yang ditentukan dalam parameter ketiga;
  • Tulis – menggunakan permintaan PUT, mengirimkan data ke server;
  • Modifikasi – memodifikasi objek dengan memproses permintaan PATCH;
  • SendForProcessing – metode yang menunjukkan penggunaan permintaan POST, seperti pada semua metode sebelumnya, harus berisi teks permintaan, dan juga dapat mengirimkan alamat file respons untuk merekam data;
  • Terima - ini akan dibahas lebih rinci di bawah;
  • GetHeadings adalah metode lain yang akan digunakan dalam artikel;
  • Hapus sebenarnya adalah permintaan Delite yang menghapus sumber daya yang diteruskan dalam permintaan dari server.

Pada baris kedua kita membuat permintaan ke situs yang dipilih, teks permintaan kita berisi satu garis miring, yang berarti kita ingin menerima halaman rumah. Jika garis miring diikuti oleh ekspresi apa pun, misalnya “halaman2” atau “berita”, kita akan mendapatkan halaman yang berbeda.

Baris ketiga mengeksekusi permintaan kami ke server.

Di bagian keempat kami menunjukkan hasilnya.

Menangani pengalihan permintaan http

Mari kita bayangkan sebuah situasi di mana kita perlu mendapatkan hasil pencarian secara terprogram melalui apa pun mesin pencari dengan kunci "Permintaan dalam 1 detik". Bagian kode yang diperlukan untuk mengakses GOOGLE ditunjukkan pada Gambar 3

Gambar.3

Di sini, selain struktur yang sudah kita kenal, ada Header dan Kode Status. Mari kita hadapi mereka.

Kode Status – nilai standar yang ditentukan dalam “Permintaan Komentar”, dapat mengambil nilai berikut:

  1. Jika semuanya baik-baik saja, nilainya akan kembali dalam kisaran 100 hingga 299;
  2. Jika terjadi pengalihan, kode dalam rentang 300 hingga 399 akan dikembalikan; dalam kasus kami, pengalihan permanen yang berhasil ke sumber daya akan ditentukan oleh kode 301;
  3. Jika ada kesalahan dalam permintaan, parameter akan mengambil nilai dari 400 hingga 499;
  4. Nilai di kisaran 500-599 menunjukkan adanya masalah pada server.

Setiap halaman memiliki judul, di mana beberapa parameter dapat dibedakan dalam teksnya (Gbr. 4):

  1. Diagram koneksi (semua yang muncul sebelum dua garis miring “//”);
  2. baris alamat koneksi;
  3. Nama pengguna dan kata sandi;
  4. Port dan host untuk dihubungkan.

Pemisahan inilah yang dilakukan oleh fungsi SplitAddressLine. Setelah menerima alamat baru, kita dapat menyimpan halaman tersebut di komputer kita dan membukanya di browser default (prosedur GetPage).

Gambar.5

Tidak ada fungsi atau cara baru untuk menangani permintaan di sini, kami sebenarnya sedang membuatnya Dokumen Teks dari badan situs dan luncurkan halaman di browser.

Kami menempatkan file di root drive D dan menyebutnya test.

Kami mengambil gambar dari situs

Sebuah pertanyaan wajar muncul: jika kita tidak membutuhkan keseluruhan situs, tetapi hanya perlu mendapatkan elemen individualnya, dapatkah hal ini dilakukan dan bagaimana caranya? Ya kamu bisa. Kode program yang memungkinkan Anda melakukan ini ditunjukkan pada Gambar 6

Gambar.6

Seperti yang Anda lihat dari gambar, di badan permintaan kami memiliki kode elemen struktur situs yang perlu kami terima. Bagian ini tidak ada dalam uraian kami sebelumnya dan kami perlu membahas poin ini lebih terinci.

Kami menggunakan browser Opera untuk mengakses situs tersebut. Ini berisi satu alat penting bagi kami, ketika Anda mengklik klik kanan mouse pada suatu elemen, Anda dapat menelepon menu konteks, salah satu itemnya adalah "Lihat kode elemen".

Berkat dia kita bisa mendapatkan alamat yang akan digunakan dalam permintaan Gambar 7.

permintaan POSTING

Tidak seperti permintaan Dapatkan sederhana, permintaan POST http memiliki badan teks, yang dapat disimpan baik dalam bentuk teks biasa atau dalam bentuk file dengan ekstensi xml, sabun, json. Ada cukup banyak alat di jaringan untuk membuat teks permintaan yang memungkinkan Anda melakukan debug dan memantau pelaksanaan permintaan tertentu.

Di 1C, untuk meluncurkan permintaan dengan teks tertentu, objek permintaan HTTP memiliki prosedur SetBodyFromString.



Memuat...
Atas