コンテンツ タイプを 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
、io
、および fmt
パッケージ)。 http リクエストから読み取られた受信ペイロードを応答ストリームに書き込むだけです。
対照的に、main
関数には、処理するロジックがさらに多くあります。リストでそれらを確認してみましょう:
handlefile
ハンドラーを使用して、/example
エンドポイントのリクエストに応答するように装備します。 sync.waitgroup
を使用して、別の goroutine でサーバーを実行します。このおかげで、サーバーは稼働していますが、プログラムを続行してその中で http リクエストを送信できます。 file.txt
) の内容を含む http リクエストを準備します。 content-type
ヘッダーを application/octet-stream
に設定し、ファイル ハンドルを newrequest
関数に渡します。 wg.wait
メソッドを使用して、waitgroup にすべてのゴルーチンを待機するように指示します。 ここに書かれたコードは間違いなく改善できるはずです。とにかく、デモンストレーションのために、http サーバーでバイナリを公開する方法と、クライアントとサーバーの両方で同じプログラムを実行する方法をよりよく理解できるように、できるだけ元のファイルに近づけたいと思います。何かご不明な点がございましたら、教えてください、ありがとうございます!
以上がポストバイナリデータ(アプリケーション/オクテットストリーム)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。