[過去ログ] Go language part 3 (1002レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
534
(1): デフォルトの名無しさん [sage] 2020/05/17(日) 07:48:09 ID:8deP89zB(1/10) AAS
>>532
532(1): デフォルトの名無しさん [sage] 2020/05/16(土) 21:02:30 ID:e+rgeli+(19/20) AAS
>>531
としても、ParseForm内で分岐させない理由にはなってないと思っちゃうんだけど、それについては?
分岐させないのは意図的だとして、その理由が引っ掛かる
> としても、ParseForm内で分岐させない理由にはなってないと思っちゃうんだけど、それについては?

そもそもParseFormがリクエストのパース処理を包括したラッパー関数だと何処で勘違いしたの?

なぜそこまで頑なにRequest-MethodとContent-Typeの値で分岐しようとしないの?
(Content-Typeの値の有無だけ確認して分岐したって言うのは無しよ)

>>533
533(3): デフォルトの名無しさん [] 2020/05/16(土) 21:30:32 ID:e+rgeli+(20/20) AAS
最終的に

func (i *rInst) ParseForm() error {
v := i.request.Header.Get("Content-Type")
if v == "" {
return i.request.ParseForm()
} else {
return i.request.ParseMultipartForm(100 * 1024)
}
}

とすることにした
のあなたの最終的な実装を見るとあなたはContent-TypeとParseFormとParseMultipartFormを理解して使って無いの、何となく動くからってやっつけで実装したようにしか見えないの。
535
(2): デフォルトの名無しさん [sage] 2020/05/17(日) 07:48:39 ID:8deP89zB(2/10) AAS
>>533
あなたの最終的な実装を元にして実装するならこんな感じかな(勝ってに拡張しちゃってるけど)
func (i *rInst) ParseForm() error {
var err error
r := i.request
ct := r.Header.Get("Content-Type")
ct, _, err = mime.ParseMediaType(ct)
if err == nil {
switch ct {
case "multipart/form-data":
if r.Method == "POST" {
err = r.ParseMultipartForm(100 * 1024)
} else {
err = errors.New(“invalid request”)
}
case “application/json”:
d := json.NewDecoder(r.Body)
// i.Json = make(map[string]interface{})
i.Json = &BindStructure{}
err = d.Decode(&i.Json)
default:
err = r.ParseForm()
}
}
return err
}

まぁ、頑張って。
537: デフォルトの名無しさん [sage] 2020/05/17(日) 08:02:56 ID:8deP89zB(3/10) AAS
> i.Json = &BindStructure{}
の部分は
i.Json = BindStructure{}
の間違えでした。
539
(1): デフォルトの名無しさん [sage] 2020/05/17(日) 08:10:55 ID:8deP89zB(4/10) AAS
寝ぼけてるぽい、もう一回上げ直し
>>533
あなたの最終的な実装を元にして実装するならこんな感じかな(勝ってに拡張しちゃってるけど)
func (i *rInst) ParseForm() error {
var err error
r := i.request
ct := r.Header.Get("Content-Type")
ct, _, err = mime.ParseMediaType(ct)
if err == nil {
switch ct {
case "multipart/form-data":
if r.Method == "POST" {
err = r.ParseMultipartForm(100 * 1024)
} else {
err = errors.New(“invalid request”)
}
case “application/json”:
d := json.NewDecoder(r.Body)
// i.Json = make(map[string]interface{})
// err = d.Decode(&i.Json)
i.Json = &BindStructure{}
err = d.Decode(i.Json)
default:
err = r.ParseForm()
}
}
return err
}
542
(1): デフォルトの名無しさん [sage] 2020/05/17(日) 08:26:21 ID:8deP89zB(5/10) AAS
スレチになるのでちょっとだけ。
ブラウザが送るって言う解釈とはちょっと違うけどjavascriptで
fetch(url, {
method: 'POST',
headers:{"Content-Type": "application/json"},
body: JSON.stringify(data)
}).then(res => res.json()).then(function(resp) {
// ...
})
みたいにapplication/jsonでリクエストできます。
544: デフォルトの名無しさん [sage] 2020/05/17(日) 08:36:58 ID:8deP89zB(6/10) AAS
>>541
541(1): デフォルトの名無しさん [sage] 2020/05/17(日) 08:21:16 ID:Y3GCZn29(4/9) AAS
>>540
いや違う
mime.ParseMultimediaTypeは呼んだ方がいい?
呼んだ方がいいから書いてくれてるんだろうな
追加しておきます
ありがとう
> mime.ParseMultimediaTypeは呼んだ方がいい?

// ct に「;」がある場合に「;」より前を取得してるだけなので
// mime.ParseMultimediaType使わずにこれでもいい
if pos := strings.Index(ct. “;”); pos != -1 {
ct = ct[:pos]
}
546: デフォルトの名無しさん [sage] 2020/05/17(日) 08:40:22 ID:8deP89zB(7/10) AAS
> まって、Content-Typeが無いと mime: no media type になる気がするんだが(コード見ただけだけど)

ごめんこっちに置き換えてw
if pos := strings.Index(ct. “;”); pos != -1 {
ct = ct[:pos]
}
iphoneで書いてるからちょっと適当になりましたw
547: デフォルトの名無しさん [sage] 2020/05/17(日) 08:45:00 ID:8deP89zB(8/10) AAS
func (i *rInst) ParseForm() error {
var err error
r := i.request
ct := r.Header.Get("Content-Type")
if pos := strings.Index(ct. “;”); pos != -1 {
ct = ct[:pos]
}
switch ct {
case "multipart/form-data":
if r.Method == "POST" {
err = r.ParseMultipartForm(100 * 1024)
} else {
err = errors.New(“invalid request”)
}
case “application/json”:
d := json.NewDecoder(r.Body)
// i.Json = make(map[string]interface{})
// err = d.Decode(&i.Json)
i.Json = &BindStructure{}
err = d.Decode(i.Json)
default:
err = r.ParseForm()
}
return err
}
550: デフォルトの名無しさん [sage] 2020/05/17(日) 08:55:11 ID:8deP89zB(9/10) AAS
>>545
545(1): デフォルトの名無しさん [sage] 2020/05/17(日) 08:38:10 ID:Y3GCZn29(6/9) AAS
>>542
うん、でもそこはAPIの仕様だから
汎用的なForm解析ならば必要だけど、自分のAPIだと割愛してよいってだけの話
>うん、でもそこはAPIの仕様だから
>汎用的なForm解析ならば必要だけど、自分のAPIだと割愛してよいってだけの話

わかりました。

サンプルがちょっとグダグダになってこめんなさいw
とりあえす頑張ってください。
551: デフォルトの名無しさん [sage] 2020/05/17(日) 08:57:15 ID:8deP89zB(10/10) AAS
>>549
549(1): デフォルトの名無しさん [] 2020/05/17(日) 08:54:49 ID:Y3GCZn29(8/9) AAS
あ、これでいいのか

// ParseForm() error
func (i *rInst) ParseForm() error {
v := i.request.Header.Get("Content-Type")
if pos := strings.Index(v, ";"); pos != -1 {
v = v[:pos]
}
if v == "multipart/form-data" {
return i.request.ParseMultipartForm(i.size)
} else {
return i.request.ParseForm()
}
}
それでもいいです。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.033s