登录
首页 >  Golang >  Go问答

go中通过tcp连接发出http请求

来源:stackoverflow

时间:2024-02-14 18:21:24 369浏览 收藏

怎么入门Golang编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面golang学习网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《go中通过tcp连接发出http请求》,涉及到,有需要的可以收藏一下

问题内容

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 的错误响应,这是什么问题。


正确答案


数据中有错误。

http1.1 应为 http/1.1

我想分享一下我是如何发现这个拼写错误的,希望对其他人有帮助。

当我想要解决一个我不太熟悉的问题时,我做的第一件事就是找出它工作时的样子。我之前使用过 nc ,所以我先尝试一下。

这是 nc 手册页中的示例:

$ printf "get / http/1.0\r\n\r\n" | nc host.example.com 80

所以我首先将 host.example.com 替换为 www.google.com

$ printf "get / http/1.0\r\n\r\n" | nc www.google.com 80

它有效!

然后将 http/1.0 替换为 http/1.1。仍然有效!

然后添加 host 标头:

$ printf "get / http/1.1\r\nhost: www.google.com\r\n\r\n" | nc www.google.com 80

有效!

然后复制问题中的字符串:

$ printf "GET / HTTP1.1\r\nHost: www.google.com\r\n\r\n" | nc www.google.com 80

这次得到了 400 错误请求

这是向前迈出的一大步!请求中有问题。通过比较两个请求很容易发现拼写错误。

最后,修复原始演示中的拼写错误,并运行演示以验证问题是否已得到解决。完成!

感谢您的阅读!

终于介绍完啦!小伙伴们,这篇关于《go中通过tcp连接发出http请求》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>