猿问

net/http GET 请求错误 tls 接收到长度为 20527 的超大记录

我坚持使用 Golang 执行 get 请求,我也尝试了三种不同的实现,但都没有成功。对于他们所有人,我都收到此错误消息:


获取https://11.11.11.1:0000/httpgw.conf?Type=SMS&Address=12345678&MsgID=12 3&Notify=N&Validity=24:00&OAdC=15555&Message=HelloBrother: tls: 接收到长度为 207 的超大记录


Bellow 是我正在处理的整个源代码:


    package main


import (

    "crypto/tls"

    "fmt"

    "io/ioutil"

    "net/http"

    "os"

)


func main() {


    cmdSecSMS := "https://11.11.11.1:0000/httpgw.conf?Type=SMS&Address=12345678&MsgID=123&Notify=N&Validity=24:00&OAdC=15555&Message="

    msg := "HelloBrother"

    cmdSecUrlSMS := cmdSecSMS + msg


    doClientTrans(cmdSecUrlSMS)


    doGetClient(cmdSecUrlSMS)


    doGet(cmdSecUrlSMS)

}


func doClientTrans(address string) {

    tr := &http.Transport{

        TLSClientConfig: &tls.Config{InsecureSkipVerify: true},

    }


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


    response, err := client.Get(address)

    if err != nil {

        fmt.Printf("%s", err)

        os.Exit(1)

    } else {

        defer response.Body.Close()

        contents, err := ioutil.ReadAll(response.Body)

        if err != nil {

            fmt.Printf("%s", err)

            os.Exit(1)

        }

        fmt.Printf("%s\n", string(contents))

        fmt.Println(" Size: ", len(string(contents)), " url: ", address)

        fmt.Println(" Status Code:  ", response.StatusCode)

        hdr := response.Header

        for key, value := range hdr {

            fmt.Println(" ", key, ":", value)

        }

    }

}


func doGet(url string) {

    response, err := http.Get(url)

    if err != nil {

        fmt.Printf("%s", err)

        os.Exit(1)

    } else {

        defer response.Body.Close()

        contents, err := ioutil.ReadAll(response.Body)

        if err != nil {

            fmt.Printf("%s", err)

            os.Exit(1)

        }


我在 windows server 2012 中运行 golang 应用程序,但我对服务器技术堆栈一无所知。

有可能解决这个问题吗?有配置解决方法或我可以尝试的其他方法吗?

感谢您的帮助


茅侃侃
浏览 290回答 1
1回答

慕婉清6462132

我很高兴与您分享我达到了所需的实现。下面的代码有效!感谢您的评论指导我找到正确的方法来完成这项任务:package mainimport ( "bufio" "crypto/tls" "fmt" "io/ioutil" "net" "net/http" "os")func main() { cmdSecSMS := "GET https://10.xxx.xx.x:xx43/httpgw.conf?" + "Type=SMS&Address=5511111&MsgID=123&Notify=N&Validity=24:00&OAdC=15555&" + "Message=blablah " + "HTTP/1.1" fmt.Println(cmdSecSMS) cmdSecUrlSMS := cmdSecSMS hostName := "10.xxx.xx.x" portNum := "xx43" doDial(cmdSecUrlSMS, hostName, portNum) //doClientTrans(cmdSecUrlSMS) //doGetClient(cmdSecUrlSMS) //doGet(cmdSecUrlSMS)}func doDial(cmd, host, port string) { // connect to this socket conn, err := net.Dial("tcp", host+":"+port) if err != nil { fmt.Printf("Some error %v", err) return } else { defer conn.Close() fmt.Printf("Connection established between %s and localhost.\n", host) fmt.Printf("Local Address : %s \n", conn.LocalAddr().String()) fmt.Printf("Remote Address : %s \n", conn.RemoteAddr().String()) // send to socket fmt.Fprintf(conn, cmd+"\n") // listen for reply message, _ := bufio.NewReader(conn).ReadString('\n') fmt.Print("Message from server: " + message) }}谢谢小伙伴们的支持!
随时随地看视频慕课网APP

相关分类

Go
我要回答