Heim  >  Artikel  >  Backend-Entwicklung  >  So fordern Sie Seife in Golang an

So fordern Sie Seife in Golang an

PHPz
PHPzOriginal
2023-04-25 10:30:41751Durchsuche

Go-Sprache ist eine Open-Source-, schnelle und leichte Programmiersprache. Sie unterstützt hohe Parallelität, Multithreading, plattformübergreifende Funktionen und wird daher häufig in der Netzwerkentwicklung verwendet. In den meisten Fällen müssen wir über HTTP-Anfragen mit anderen Systemen interagieren. Einige Systeme unterstützen jedoch kein HTTP-Protokoll, sondern verwenden das SOAP-Protokoll (Simple Object Access Protocol). Wie sendet man also eine SOAP-Anfrage in der Go-Sprache? In diesem Artikel wird dieses Problem vorgestellt.

Vorausgesetzte Kenntnisse

Bevor Sie über das Senden von SOAP-Anfragen sprechen, müssen Sie einige notwendige Wissenspunkte verstehen.

SOAP-Protokoll

SOAP ist ein auf der XML-Sprache basierendes Protokoll, das zum Datenaustausch in einer verteilten Umgebung verwendet wird. Es definiert Nachrichtenformate und Regeln für die Beschreibung und Kommunikation und ermöglicht es Anwendungen, Nachrichten über Protokolle wie HTTP und SMTP zu senden und zu empfangen. SOAP-Nachrichten bestehen hauptsächlich aus drei Teilen: Umschlag, Header und Text.

  • Umschlag: Das Stammelement der SOAP-Nachricht, das alle Nachrichtenelemente enthält.
  • Header: Optional, wird zur Weitergabe von Informationen verwendet, die nichts mit den eigentlichen Daten zu tun haben, wie z. B. Sicherheitsinformationen.
  • body: Enthält die tatsächlich übertragenen Daten.

Das Format einer SOAP-Nachricht ist wie folgt:

<?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>

net/http-Bibliothek in der Go-Sprache

net/http ist eine der Standardbibliotheken, die von der Go-Sprache für die Verarbeitung von HTTP-Anfragen und -Antworten bereitgestellt werden. Mit dieser Bibliothek können wir problemlos Netzwerkoperationen von HTTP-Servern und HTTP-Clients implementieren. Bei HTTP-Anfragen müssen Sie auf die folgenden Schlüsselparameter achten:

  • URL: die Zieladresse der Anfrage.
  • Methode: Anforderungsmethode, einschließlich GET, POST, PUT, DELETE usw.
  • Header: Fordern Sie Header-Informationen wie Content-Type, User-Agent usw. an.
  • Body: Die tatsächlich angeforderten Daten.

Schritte zum Senden einer SOAP-Anfrage

Mit der bisherigen Wissensdatenbank können wir nun Schritt für Schritt lernen, wie man SOAP-Anfragen in der Sprache Go sendet. Die spezifischen Schritte sind wie folgt:

  • Bestätigen Sie die Zieladresse.

Zuerst müssen wir die Adresse und Portnummer des Zielservers bestätigen. Nachdem wir diese Informationen ermittelt haben, können wir die Anforderungs-URL erstellen.

  • Bestätigen Sie die Anforderungsmethode und die Anforderungsheader.

Als nächstes müssen wir die SOAP-Anforderungsmethode und die Anforderungsheaderinformationen bestätigen. SOAP-Anfragen müssen XML-Dokumenttypdaten in HTTP-Anfragen kapseln, daher müssen wir Parameter wie Content-Type und SOAPAction im Anfrageheader festlegen. Die spezifischen Anforderungsheaderinformationen müssen gemäß dem Schnittstellendokument ermittelt werden.

  • Erstellen der Anforderungsnachricht

Nachdem wir die Anforderungsmethode und die Anforderungsheaderinformationen bestätigt haben, müssen wir die Anforderungsnachricht erstellen. Die Anforderungsnachricht enthält alle Elemente der SOAP-Nachricht: Umschlag, Header, Text usw. Unter anderem handelt es sich bei dem Inhalt des Body-Elements um die tatsächlichen Daten. Sie können „encoding/xml“ oder „string“ verwenden, um die Anforderungsnachricht zu erstellen. Hier verwenden wir die Methode „encoding/xml“.

  • Senden Sie eine Anfrage

Nachdem wir die Anfragenachricht erstellt haben, können wir den Client in der Net/http-Bibliothek verwenden, um die Anfrage zu senden. Die spezifische Methode lautet wie folgt:

resp, err := client.Do(req)

Unter diesen ist client der HTTP-Client und req die HTTP-Anfrage. Die Do-Methode wird zum Senden von HTTP-Anfragen und zum Zurückgeben von HTTP-Antworten verwendet. Es ist zu beachten, dass der Client die Verbindung nach der Verwendung schließen muss.

  • Verarbeiten der Antwort

Schließlich müssen wir die HTTP-Antwort verarbeiten. Extrahieren Sie die tatsächlichen Daten aus der Antwort und analysieren Sie sie. Hier müssen wir den Dateninhalt und das Format bestimmen, die basierend auf dem Schnittstellendokument extrahiert und analysiert werden müssen.

Beispielcode

Nachfolgend nehmen wir eine tatsächliche SOAP-Anfrage als Beispiel, um den Beispielcode für die Verwendung der Go-Sprache zum Senden einer SOAP-Anfrage zu zeigen. Hier nutzen wir die Schnittstelle einer E-Commerce-Plattform, mit leichten Anpassungen an die konkrete Situation.

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进行解析,提取需要的数据
}

Zusammenfassung

Das Senden von SOAP-Anfragen in der Go-Sprache kann etwas umständlich sein, aber solange wir einige Grundkenntnisse und Vorsichtsmaßnahmen verstehen, können wir die Anfrage reibungslos bearbeiten. Diese Wissenspunkte sind besonders wichtig, wenn Sie auf eine Schnittstelle zugreifen müssen, die nur das SOAP-Protokoll unterstützt. Ich hoffe, dass dieser Artikel den Lesern hilfreich sein kann.

Das obige ist der detaillierte Inhalt vonSo fordern Sie Seife in Golang an. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn