第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使 go http 客戶端與非標準 http 服務器一起工作

使 go http 客戶端與非標準 http 服務器一起工作

Go
慕妹3242003 2021-11-22 10:37:16
Shoutcast 服務器基本上使用 http,但有一個重要區(qū)別:它們GET用ICY 200 OK代替 來響應請求HTTP/1.1 200 OK。Go 不會有它,并且正確地失敗并顯示錯誤malformed HTTP version "ICY"。但是,我想讓事情順利進行,并且想知道最好的方法是什么。到目前為止我的想法:使用自定義 http.Transport.Proxy 更改ICY為HTTP/1.1飛行中一個做同樣事情的進程外代理重載http.ParseHTTPVersion(但 golang 沒有函數重載)復制整個http包,只是為了修改 ParseHTTPVersion數字 1. 似乎最具吸引力,但我不知道如何尊重 http“范圍”并實際修改給定 http 版本上的所有響應。這種事情http.Transport.Proxy能搞定嗎?任何人都可以給我任何指示嗎?
查看完整描述

1 回答

?
FFIVE

TA貢獻1797條經驗 獲得超6個贊

我通過創(chuàng)建一個返回包裝連接的自定義 Dial 函數來實現這一點。我的包裝器攔截了連接上的第一次讀取,并用 HTTP/1.1 替換了 ICY。不是超級健壯,但證明了這個概念:


package main


import (

    "fmt"

    "net"

    "net/http"

)


type IcyConnWrapper struct {

    net.Conn

    haveReadAny bool

}


func (i *IcyConnWrapper) Read(b []byte) (int, error) {

    if i.haveReadAny {

        return i.Conn.Read(b)

    }

    i.haveReadAny = true

    //bounds checking ommitted. There are a few ways this can go wrong.

    //always check array sizes and returned n.

    n, err := i.Conn.Read(b[:3])

    if err != nil {

        return n, err

    }

    if string(b[:3]) == "ICY" {

        //write Correct http response into buffer

        copy(b, []byte("HTTP/1.1"))

        return 8, nil

    }

    return n, nil

}


func main() {


    tr := &http.Transport{

        Dial: func(network, a string) (net.Conn, error) {

            realConn, err := net.Dial(network, a)

            if err != nil {

                return nil, err

            }

            return &IcyConnWrapper{Conn: realConn}, nil

        },

    }

    client := &http.Client{Transport: tr}

    http.DefaultClient = client

    resp, err := http.Get("http://178.33.230.189:8100") //random url I found on the internet

    fmt.Println(err)

    fmt.Println(resp.StatusCode)

}


查看完整回答
反對 回復 2021-11-22
  • 1 回答
  • 0 關注
  • 204 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號