Go でカスタム マルチパート/混合リクエストを作成し、サーバー解析エラーを解決する方法

Susan Sarandon
リリース: 2024-10-24 01:32:01
オリジナル
960 人が閲覧しました

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

Go のマルチパート リクエスト: 総合ガイド

サーバーとクライアントの通信では、マルチパート リクエストは複雑なデータの送信において重要な役割を果たします。これらのリクエストは、複数の部分を 1 つの本文に結合し、それぞれに独自のコンテンツ タイプとオプションのメタデータが含まれます。 Go では、マルチパート リクエストの生成には慎重な検討が必要です。この記事は、カスタム マルチパート リクエストを作成するための包括的なソリューションを提供することを目的としています。

問題:

Go でマルチパート/混合リクエストを操作する場合、開発者は共通の課題に遭遇する可能性があります。 。サーバーはリクエスト本文を正しく解釈できず、HTTP エラーが発生します。これは多くの場合、マルチパートの生成が間違っていることが原因で発生します。次のコードは例を示しています。

<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>
ログイン後にコピー

このシナリオでは、writer.CreateFormField を利用してマルチパート フォーム フィールドを作成します。ただし、サーバーはマルチパート/混合リクエストを予期しているため、解析エラーが発生します。

解決策:

この問題を解決してマルチパート/混合リクエストを正常に生成するには、次の手順に従う必要があります:

  1. リクエスト本文として機能する新しい bytes.Buffer を初期化します:
<code class="go">body := &bytes.Buffer{}</code>
ログイン後にコピー
  1. multipart.Writer インスタンスを作成して、マルチパートリクエストを構築します:
<code class="go">writer := multipart.NewWriter(body)</code>
ログイン後にコピー
  1. writer.CreatePart を使用して新しいパートを確立し、正しい Content-Type ヘッダーを指定します:
<code class="go">part, _ := writer.CreatePart(textproto.MIMEHeader{"Content-Type": {"application/json"}})</code>
ログイン後にコピー
  1. パートにペイロードを書き込みます:
<code class="go">part.Write(jsonStr)</code>
ログイン後にコピー
  1. マルチパート ライターを終了して、送信用の本文を準備します:
<code class="go">writer.Close()</code>
ログイン後にコピー
  1. 新しい HTTP リクエストを作成し、境界とリクエスト本文を設定します。
<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>
ログイン後にコピー

これらの変更を実装すると、マルチパート/混合リクエストが適切にフォーマットされ、サーバーに送信できる状態になります。

追加のヒント:

cURL に慣れている人のために、同じ結果を達成する方法を次に示します:

curl -X POST \
  --url http://1.1.1.1/blabla \
  --header 'Content-Type: multipart/mixed; boundary=--boundary-of-form' \
  --form '{"hello": "world"}'
ログイン後にコピー

「--boundary-of」を忘れずに置き換えてください。

これらの推奨事項をコードに組み込むことで、Go でマルチパート/混合リクエストを効果的に生成でき、正確なデータ送信とターゲット サーバーとのシームレスな統合が保証されます。

以上がGo でカスタム マルチパート/混合リクエストを作成し、サーバー解析エラーを解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!