Maison > développement back-end > Golang > le corps du texte

Comment créer des requêtes multipart/mixtes personnalisées dans Go et résoudre les erreurs d'analyse du serveur ?

Susan Sarandon
Libérer: 2024-10-24 01:32:01
original
960 Les gens l'ont consulté

How to Create Custom Multipart/Mixed Requests in Go and Resolve Server Parsing Errors?

Requêtes multiparts en Go : un guide complet

Dans la communication serveur-client, les requêtes multiparts jouent un rôle crucial dans la transmission de données complexes. Ces requêtes combinent plusieurs parties en un seul corps, chacune avec son propre type de contenu et des métadonnées facultatives. Dans Go, la génération de requêtes en plusieurs parties nécessite un examen attentif. Cet article vise à fournir une solution complète pour créer des requêtes multiparts personnalisées.

Problème :

Lorsqu'ils travaillent avec des requêtes multiparts/mixtes dans Go, les développeurs peuvent rencontrer un défi commun. . Le serveur ne parvient pas à interpréter correctement le corps de la requête, ce qui entraîne des erreurs HTTP. Cela provient souvent d’une génération multipart incorrecte. Le code suivant montre un exemple :

<code class="go">var jsonStr = []byte(`{"hello" : "world"}`)

func main() {

    body := &bytes.Buffer{}
    writer := multipart.NewWriter(body)

    part, _:= writer.CreateFormField("")

    part.Write(jsonStr)
    writer.Close()

    req, _ := http.NewRequest("POST", "blabla", body)
    req.Header.Set("Content-Type", writer.FormDataContentType())

   ...

}</code>
Copier après la connexion

Dans ce scénario,writer.CreateFormField est utilisé pour créer un champ de formulaire en plusieurs parties. Cependant, le serveur attend une requête multipart/mixte, ce qui entraîne des erreurs d'analyse.

Solution :

Pour résoudre ce problème et générer avec succès une requête multipart/mixte, le les étapes suivantes doivent être suivies :

  1. Initialisez un nouveau bytes.Buffer pour servir de corps de requête :
<code class="go">body := &bytes.Buffer{}</code>
Copier après la connexion
  1. Créez une instance multipart.Writer pour construisez la requête en plusieurs parties :
<code class="go">writer := multipart.NewWriter(body)</code>
Copier après la connexion
  1. Établissez une nouvelle partie à l'aide dewriter.CreatePart et spécifiez l'en-tête Content-Type correct :
<code class="go">part, _ := writer.CreatePart(textproto.MIMEHeader{"Content-Type": {"application/json"}})</code>
Copier après la connexion
  1. Écrivez la charge utile dans la pièce :
<code class="go">part.Write(jsonStr)</code>
Copier après la connexion
  1. Terminez l'écrivain en plusieurs parties pour préparer le corps à la soumission :
<code class="go">writer.Close()</code>
Copier après la connexion
  1. Créez une nouvelle requête HTTP et remplissez-la avec la limite et le corps de la requête :
<code class="go">req, _ := http.NewRequest("POST", "http://1.1.1.1/blabla", body)
req.Header.Set("Content-Type", "multipart/mixed; boundary="+writer.Boundary())</code>
Copier après la connexion

La mise en œuvre de ces modifications garantit que la requête multipart/mixte est correctement formatée et prête à être transmise au serveur.

Conseils supplémentaires :

Pour ceux qui connaissent cURL, voici comment obtenir le même résultat :

curl -X POST \
  --url http://1.1.1.1/blabla \
  --header 'Content-Type: multipart/mixed; boundary=--boundary-of-form' \
  --form '{"hello": "world"}'
Copier après la connexion

N'oubliez pas de remplacer "--boundary-of -form" avec une chaîne de délimitation appropriée.

En incorporant ces recommandations dans votre code, vous pouvez générer efficacement des requêtes multipart/mixtes dans Go, garantissant une transmission de données précise et une intégration transparente avec les serveurs cibles.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!