Cara minta sabun di golang

PHPz
Lepaskan: 2023-04-25 13:39:27
asal
791 orang telah melayarinya

Bahasa Go ialah bahasa pengaturcaraan sumber terbuka, pantas dan ringan Ia menyokong konkurensi tinggi, berbilang benang, merentas platform dan ciri lain, jadi ia digunakan secara meluas dalam pembangunan rangkaian. Dalam kebanyakan kes, kita perlu berinteraksi dengan sistem lain melalui permintaan HTTP. Walau bagaimanapun, sesetengah sistem tidak menyokong protokol HTTP, tetapi menggunakan protokol SOAP (Simple Object Access Protocol). Jadi, bagaimana untuk menghantar permintaan SOAP dalam bahasa Go? Artikel ini akan memperkenalkan isu ini.

Pengetahuan prasyarat

Sebelum mula bercakap tentang cara menghantar permintaan SOAP, anda perlu memahami beberapa perkara pengetahuan yang diperlukan.

Protokol SOAP

SOAP ialah protokol berasaskan bahasa XML yang digunakan untuk bertukar-tukar data dalam persekitaran yang diedarkan. Ia mentakrifkan format mesej dan peraturan untuk penerangan dan komunikasi, membenarkan aplikasi menghantar dan menerima mesej melalui protokol seperti HTTP dan SMTP. Mesej SOAP terutamanya terdiri daripada tiga bahagian: sampul surat, pengepala dan badan.

  • sampul surat: Elemen akar mesej SOAP, yang mengandungi semua elemen mesej.
  • Tajuk: Pilihan, digunakan untuk menghantar maklumat yang tidak berkaitan dengan data sebenar, seperti maklumat keselamatan.
  • badan: Mengandungi data sebenar yang dihantar.

Format mesej SOAP adalah seperti berikut:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Header>
        <!-- 可选的头部信息 -->
    </soap:Header>
    <soap:Body>
        <!-- 实际数据 -->
    </soap:Body>
</soap:Envelope>
Salin selepas log masuk

Pustaka net/http bahasa Go

net/http ialah salah satu daripada standard perpustakaan yang disediakan oleh bahasa Go One, untuk mengendalikan permintaan dan respons HTTP. Melalui perpustakaan ini, kami boleh melaksanakan operasi rangkaian pelayan HTTP dan klien HTTP dengan mudah. Untuk permintaan HTTP, anda perlu memberi perhatian kepada parameter utama berikut:

  • URL: alamat sasaran permintaan.
  • Kaedah: Kaedah permintaan, termasuk GET, POST, PUT, DELETE, dsb.
  • Pengepala: Minta maklumat pengepala, seperti Jenis Kandungan, Ejen Pengguna, dsb.
  • Badan: data sebenar yang diminta.

Langkah-langkah untuk menghantar permintaan SOAP

Dengan pangkalan pengetahuan sebelumnya, kini kita boleh mempelajari langkah demi langkah cara menghantar permintaan SOAP dalam bahasa Go. Langkah-langkah khusus adalah seperti berikut:

  • Sahkan alamat sasaran

Pertama, kita perlu mengesahkan alamat dan nombor port pelayan sasaran. Selepas menentukan maklumat ini, kami boleh membina URL permintaan.

  • Sahkan kaedah permintaan dan pengepala permintaan

Seterusnya, kami perlu mengesahkan kaedah permintaan SOAP dan meminta maklumat pengepala. Permintaan SOAP perlu merangkum data jenis dokumen XML ke dalam permintaan HTTP, jadi kami perlu menetapkan parameter seperti Content-Type dan SOAPAction dalam pengepala permintaan. Maklumat pengepala permintaan khusus perlu ditentukan mengikut dokumen antara muka.

  • Membina mesej permintaan

Selepas mengesahkan kaedah permintaan dan meminta maklumat pengepala, kami perlu membina mesej permintaan. Mesej permintaan mengandungi semua elemen mesej SOAP: Sampul, Pengepala, Badan, dsb. Antaranya, kandungan dalam elemen Badan adalah data sebenar. Anda boleh menggunakan pengekodan/xml atau rentetan untuk membina mesej permintaan. Di sini kami menggunakan kaedah pengekodan/xml.

  • Hantar permintaan

Selepas membina mesej permintaan, kami boleh menggunakan klien dalam perpustakaan net/http untuk menghantar permintaan. Kaedah khusus adalah seperti berikut:

resp, err := client.Do(req)
Salin selepas log masuk

Antaranya, klien ialah klien HTTP dan req ialah permintaan HTTP. Kaedah Do digunakan untuk menghantar permintaan HTTP dan mengembalikan respons HTTP. Perlu diingatkan bahawa pelanggan perlu menutup sambungan selepas digunakan.

  • Mengendalikan respons

Akhir sekali, kami perlu mengendalikan respons HTTP. Ekstrak data sebenar daripada respons dan huraikannya. Di sini, kita perlu menentukan kandungan dan format data yang perlu diekstrak dan dihuraikan berdasarkan dokumen antara muka.

Kod Contoh

Di bawah, kami mengambil permintaan SOAP sebenar sebagai contoh untuk menunjukkan cara menggunakan bahasa Go untuk menghantar kod sampel permintaan SOAP. Di sini, kami menggunakan antara muka platform e-dagang, dengan sedikit pengubahsuaian pada situasi tertentu.

package main

import (
    "bytes"
    "encoding/xml"
    "fmt"
    "io/ioutil"
    "net/http"
    "os"
)

type Envelope struct {
    XMLName xml.Name `xml:"http://schemas.xmlsoap.org/soap/envelope/ Envelope"`
    Header  *Header  `xml:",omitempty"`
    Body    *Body
}

type Header struct {
    // 这里可以定义需要的头部信息
}

type Body struct {
    XMLName xml.Name `xml:"Body"`
    Req     *Req
}

type Req struct {
    XMLName xml.Name `xml:"http://www.example.com/ OrderRequest"`
    Order   *Order
}

type Order struct {
    XMLName xml.Name `xml:"Order"`
    // 这里定义Order元素的子元素
}

func main() {
    // 确认目标地址
    url := "http://example.com/path/to/server"
    
    // 确认请求方法和请求头部信息
    soapAction := "http://www.example.com/OrderRequest"
    contentType := "text/xml;charset=utf-8"
    
    // 构建请求消息
    order := &Order{
        // 这里为Order元素的子元素赋值
    }
    req := &Req{
        Order: order,
    }
    body := &Body{
        Req: req,
    }
    envelope := &Envelope{
        Body: body,
    }
    data, err := xml.Marshal(envelope)
    if err != nil {
        fmt.Println("marshal error:", err)
        os.Exit(1)
    }
    
    // 发送请求
    client := &http.Client{}
    reqBody := bytes.NewBuffer(data)
    req, err := http.NewRequest("POST", url, reqBody)
    if err != nil {
        fmt.Println("create request error:", err)
        os.Exit(1)
    }
    req.Header.Set("Content-Type", contentType)
    req.Header.Set("SOAPAction", soapAction)
    resp, err := client.Do(req)
    if err != nil {
        fmt.Println("send request error:", err)
        os.Exit(1)
    }
    defer resp.Body.Close()
    
    // 处理响应
    respBody, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Println("read response body error:", err)
        os.Exit(1)
    }
    
    // 这里对respBody进行解析,提取需要的数据
}
Salin selepas log masuk

Ringkasan

Menghantar permintaan SOAP dalam bahasa Go mungkin agak menyusahkan, tetapi selagi kami memahami beberapa pengetahuan asas dan langkah berjaga-jaga, kami boleh menyelesaikan permintaan itu dengan lancar. Titik pengetahuan ini amat penting apabila anda perlu mengakses antara muka yang hanya menyokong protokol SOAP. Saya harap artikel ini dapat memberi manfaat kepada pembaca.

Atas ialah kandungan terperinci Cara minta sabun di golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!