package main
import (
"crypto/tls"
"fmt"
)
func main() {
conf := &tls.Config{}
conn, _ := tls.Dial("tcp", "www.google.com:443", conf)
data := []byte("GET / HTTP1.1\r\nHost: www.google.com\r\n\r\n")
conn.Write(data)
buf := make([]byte, 5000)
conn.Read(buf)
fmt.Println(string(buf[:]))
}
我试图通过原始TCP连接数据进行HTTP请求,但得到400 Bad Request的错误响应,这是什么问题?
1条答案
按热度按时间3hvapo4f1#
数据中有一处排印错误。
HTTP1.1
应该是HTTP/1.1
。我想分享我是如何发现错字的,希望能帮助到别人。
当我想解决一个我不太熟悉的问题时,我做的第一件事就是找出它工作时的样子。我以前用过nc,所以我先试试。
下面是
nc
手册页中的一个示例:所以我先用
www.google.com
替换了host.example.com
:成功了!
然后将
HTTP/1.0
替换为HTTP/1.1
。仍然有效!然后添加
Host
头文件:工作!
然后从问题中复制字符串:
这次得到了
400 Bad Request
。这是一个很大的进步!请求中有一些错误。通过比较两个请求很容易发现错别字。
最后,修复原始演示中的错字,并运行演示以验证问题已得到解决。完成!
感谢阅读!