网络/HTTP GET请求错误:tls接收到长度为20527的超大记录。

huangapple go评论72阅读模式
英文:

net/http GET request error tls oversized record received with length 20527

问题

我卡在使用Golang执行GET请求的过程中,我尝试了三种不同的实现方式,但都没有成功。对于所有这些实现方式,我都收到了以下错误消息:

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: oversized recor
d received with length 20527

下面是我正在使用的完整源代码:

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)
		}
		fmt.Println(" Size: ", len(string(contents)), " url: ", url)
		fmt.Println(" Status Code:  ", response.StatusCode)
		hdr := response.Header
		for key, value := range hdr {
			fmt.Println(" ", key, ":", value)
		}
	}
}

func doGetClient(url string) {
	client := &http.Client{}

	response, err := client.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)
		}
		fmt.Println(" Size: ", len(string(contents)), " url: ", url)
		fmt.Println(" Status Code: ", response.StatusCode)
		hdr := response.Header
		for key, value := range hdr {
			fmt.Println(" ", key, ":", value)
		}
	}
}

当使用telnet时,这个GET请求正常工作:

telnet 11.11.11.1 0000

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 HTTP/1.1

^:
exit

我在Windows Server 2012上运行Golang应用程序,对服务器技术栈一无所知。

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

谢谢你的帮助。

英文:

I'm stucking to perform a get request using Golang and I also have tried three distinct implementations without success. For all them I'm receiving this error message:

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: oversized recor
d received with length 20527

Bellow is the entire source code that I'm working on:

    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)
}
fmt.Println(" Size: ", len(string(contents)), " url: ", url)
fmt.Println(" Status Code:  ", response.StatusCode)
hdr := response.Header
for key, value := range hdr {
fmt.Println(" ", key, ":", value)
}
}
}
func doGetClient(url string) {
client := &http.Client{}
response, err := client.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)
}
fmt.Println(" Size: ", len(string(contents)), " url: ", url)
fmt.Println(" Status Code: ", response.StatusCode)
hdr := response.Header
for key, value := range hdr {
fmt.Println(" ", key, ":", value)
}
}
}

When using telnet, this GET request works normally:

telnet 11.11.11.1 0000

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 HTTP/1.1

^:
exit

网络/HTTP GET请求错误:tls接收到长度为20527的超大记录。

I'm running the golang app in the windows server 2012 and I don't know nothing about the server tech stack.

It's possible to fix this issue? There is a configuration workaround or something else that I can try?

thanks for your help

答案1

得分: 1

我很高兴地与你分享,我已经完成了所需的实现。

下面的代码是有效的!

感谢你的评论,指导我选择了正确的方法来完成这个任务:

package main


import (
 "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)
 }

}

Thank you guys for your support!

谢谢你们的支持!

英文:

I'm glad to share with you that I reach the needed implementation.

The code bellow works!

Thanks for your comments that guide me to the right approach for this task:

package main
import (
"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)
}

}

Thank you guys for your support!

huangapple
  • 本文由 发表于 2016年1月8日 21:45:44
  • 转载请务必保留本文链接:https://go.coder-hub.com/34678564.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定