ポストバイナリデータ(アプリケーション/オクテットストリーム)

WBOY
リリース: 2024-02-05 21:15:28
転載
686 人が閲覧しました

ポストバイナリデータ(アプリケーション/オクテットストリーム)

質問内容

コンテンツ タイプを application/octet-stream に設定し、リクエストにファイルのバイナリ データを設定してファイルをアップロードしたい体。 golang でこれを行うにはどうすればよいでしょうか。開始コードは次のとおりです:

package main

import (
    "fmt"
    "log"
    "net/http"
    "net/http/httputil"
    "os"
)

func main() {
    file, err := os.Open("file.pdf")
    if err != nil {
        log.Fatalln(err)
    }

    req, err := http.NewRequest("POST", fmt.Sprintf("https://example.com/upload"), nil)
    req.Header.Add("Content-Type", "application/octet-stream")

    if err != nil {
        log.Fatalln(err)
    }

    client := &http.Client{
        Transport: &http.Transport{
            DisableCompression: true,
        },
    }

    resp, err := client.Do(req)
    if err != nil {
        log.Fatalln(err)
    }
    defer resp.Body.Close()

    reqDump, err := httputil.DumpRequest(req, true)
    if err != nil {
        log.Fatalln(err)
    }

    fmt.Println(reqDump)
}
ログイン後にコピー

正解


問題の解決に役立つ可能性のある回答をまとめました。すべてのコードは main.go ファイルに属しており、デモンストレーションのみを目的としています。これには、handler 関数と main 関数という 2 つの主要な部分があります。ハンドラーから始めましょう。

http ハンドラー

リーリー

ここでは、あなたが使用しているものにのみ依存しています (標準ライブラリのみを使用してください: httpio、および fmt パッケージ)。 http リクエストから読み取られた受信ペイロードを応答ストリームに書き込むだけです。

主な機能

リーリー

対照的に、main 関数には、処理するロジックがさらに多くあります。リストでそれらを確認してみましょう:

  1. 受信リクエストを処理する http サーバーを作成します。前に作成した handlefile ハンドラーを使用して、/example エンドポイントのリクエストに応答するように装備します。
  2. sync.waitgroup を使用して、別の goroutine でサーバーを実行します。このおかげで、サーバーは稼働していますが、プログラムを続行してその中で http リクエストを送信できます。
  3. ローカル ファイル システムから読み取られたファイル (この例では file.txt) の内容を含む http リクエストを準備します。 content-type ヘッダーを application/octet-stream に設定し、ファイル ハンドルを newrequest 関数に渡します。
  4. リクエストを作成し、http 応答ペイロードの内容を出力します。
  5. サーバーをシャットダウンし、wg.wait メソッドを使用して、waitgroup にすべてのゴルーチンを待機するように指示します。

最終考慮事項

ここに書かれたコードは間違いなく改善できるはずです。とにかく、デモンストレーションのために、http サーバーでバイナリを公開する方法と、クライアントとサーバーの両方で同じプログラムを実行する方法をよりよく理解できるように、できるだけ元のファイルに近づけたいと思います。何かご不明な点がございましたら、教えてください、ありがとうございます!

以上がポストバイナリデータ(アプリケーション/オクテットストリーム)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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