首页 > 后端开发 > Golang > 正文

如何从连接golang获取json数据

WBOY
发布: 2024-02-06 08:33:04
转载
1279人浏览过

如何从连接golang获取json数据

问题内容

我使用 golang 编写的 tcp 连接从控制台发送curl 请求。所以它基本上是一个数据流。我可以使用以下代码成功接收数据并将其存储在缓冲区中

func PushDataToBuffer(bufferedChannel chan []byte, conn net.Conn) {
    defer conn.Close()
    fmt.Println("pushing messages into buffer...")

    buffer := make([]byte, 2048) // 2048 = assumption for reasonable event byte size

    for {
        n, err := conn.Read(buffer)
        if err != nil {
            fmt.Println("read error: ", err)
            continue // to continue listening for connections
        }
        bufferedChannel <- buffer[:n]
    }
}
登录后复制

但是,当我尝试使用此代码读取此数据时:

for data := range bufferedChannel {
    fmt.Println("The len of buffer is: ", len(bufferedChannel))
    dataObject := models.Event{}
    err := json.Unmarshal(data, &dataObject)
}
登录后复制

我收到以下错误

Invalid character 'P' looking for beginning of value
2024/01/29 09:40:31 syntax error at byte offset 1
登录后复制

当我打印出数据本身时,我看到了这个

立即学习go语言免费学习笔记(深入)”;

Find JSON Path Online
Find JSON Path Online

Easily find JSON paths within JSON objects using our intuitive Json Path Finder

Find JSON Path Online 30
查看详情 Find JSON Path Online
POST / HTTP/1.1
Host: localhost:8952
User-Agent: curl/7.77.0
Accept: */*
Content-Type: application/json
Content-Length: 232

{\"customer\":\"Ada\",\"eventtype\":\"BuyingApples\",\"time\":\"0001-01-01T00:00:00Z\",\"specifics\":[{\"Key\":\"Shop\",\"Value\":\"Bakery\"},{\"Key\":\"Location\",\"Value\":\"Downtown\"},{\"Key\":\"recommends\",\"Value\":\"yes\"}]}
登录后复制

从上面你可以清楚的看出问题出在哪里了。它将标头添加到数据中,因此 POST 中的 P 就是 golang 所抱怨的。这就是为什么我无法解组它。所以我的问题是这样的: 我如何将数据发送到服务器,或者在数据到达时对其进行修剪,我将使用的只是 json 部分:

{\"customer\":\"Ada\",\"eventtype\":\"BuyingApples\",\"time\":\"0001-01-01T00:00:00Z\",\"specifics\":[{\"Key\":\"Shop\",\"Value\":\"Bakery\"},{\"Key\":\"Location\",\"Value\":\"Downtown\"},{\"Key\":\"recommends\",\"Value\":\"yes\"}]}
登录后复制

P.S - 我使用 tcp 连接来获取数据而不是 http

我在网上查找了各种解决方案,但没有找到适合我的用例的解决方案


正确答案


cURL 不是 TCP 客户端。它是一个 HTTP 客户端,自然会生成一些协议本机的标头(例如请求方法和路径)。这就是最终通过 TCP 连接发送的内容。因此,服务器期望的内容(普通 TCP)和客户端发送的内容(HTTP)不匹配。

您应该更新服务器代码,将原始数据解析为 HTTP 请求,例如 http .ReadRequest,或者简单地使用通过网络发送预期负载的客户端 - 即纯 TCP。 Netcat 将使这变得容易。在不太了解您要解决的问题的情况下,我默认推荐后一种方法(因为为什么在首先需要 TCP 时发送 HTTP?)。

以上就是如何从连接golang获取json数据的详细内容,更多请关注php中文网其它相关文章!

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:stackoverflow网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门推荐
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号