質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Q&A

解決済

1回答

820閲覧

curlリクエスト時のヘッダー追加について

EzrealTrueshot

総合スコア388

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

0グッド

0クリップ

投稿2020/10/20 04:25

編集2020/10/20 04:26

前提・実現したいこと

ファイルアップロード時に下記ヘッダーを付与したい。

Authorization: Bearer XXX

発生している問題・エラーメッセージ

ヘッダーに Authorization: Bearer XXX がきちんと付与されておらず、サーバー側ではじかれてしまっている。

該当のソースコード

こちらのサイトを参考にしています。

go

1package main 2 3import ( 4 "bytes" 5 "io" 6 "log" 7 "mime/multipart" 8 "net/http" 9 "os" 10) 11 12func main() { 13 url := "http://localhost:3000/upload" 14 fieldname := "file" 15 filename := "hello.txt" 16 file, err := os.Open(filename) 17 handleError(err) 18 19 // リクエストボディのデータを受け取るio.Writerを生成する。 20 body := &bytes.Buffer{} 21 22 // データのmultipartエンコーディングを管理するmultipart.Writerを生成する。 23 // ランダムなbase-16バウンダリが生成される。 24 mw := multipart.NewWriter(body) 25 26 // ファイルに使うパートを生成する。 27 // ヘッダ以外はデータは書き込まれない。 28 // fieldnameとfilenameの値がヘッダに含められる。 29 // ファイルデータを書き込むio.Writerが返却される。 30 fw, err := mw.CreateFormFile(fieldname, filename) 31 32 // fwで作ったパートにファイルのデータを書き込む 33 _, err = io.Copy(fw, file) 34 handleError(err) 35 36 // リクエストのContent-Typeヘッダに使う値を取得する(バウンダリを含む) 37 contentType := mw.FormDataContentType() 38 39 // 書き込みが終わったので最終のバウンダリを入れる 40 err = mw.Close() 41 handleError(err) 42 43 // contentTypeとbodyを使ってリクエストを送信する 44 resp, err := http.Post(url, contentType, body) 45 handleError(err) 46 47 err = resp.Body.Close() 48 handleError(err) 49} 50 51func handleError(err error) { 52 if err != nil { 53 log.Fatal(err) 54 } 55}

試したこと

contentType += "; Authorization: Bearer XXX"

contentType部分に追記しました。が、サーバー側で確認したところきちんと付与されていませんでした。

補足情報(FW/ツールのバージョンなど)

Ubuntu18.04
go 1.13.5

質問

上記のコード内でどのようにすればヘッダー付与を実現できるかご存知の方いらっしゃいましたらご教示いただけませんでしょうか?
足りない情報等ありましたら追記致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

リクエストヘッダをカスタマイズする場合は、http.NewRequest,Header.Set,client.Doのコンボが必要です。resp, err := http.Post(url, contentType, body)を以下に書き換えてみてください。

Go

1 req, _ := http.NewRequest("POST", url, body) 2 req.Header.Set("Content-Type", contentType) 3 req.Header.Set("Authorization", "Bearer XXX") 4 client := new(http.Client) 5 resp, err := client.Do(req)

投稿2020/10/20 13:26

toast-uz

総合スコア3266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

EzrealTrueshot

2020/10/20 14:10

「コンボ」という響きが頭にすーと入ってきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問