如何像使用 go-curl 一样为 net/http GET 请求设置读取回调?


prtyaa
prtyaa 2024-02-11 21:27:28 52821 赞同 0 反对 0
分类: 资源 标签: 后端
php小编西瓜为您介绍如何为net/http GET请求设置读取回调,实现类似于go-curl的功能。在使用net/http库发起GET请求时,我们可以利用http.Client和http.Request结构体的相关方法来设置读取回调函数。通过设置http.Response.Body的值为一个实现了io.Reader接口的自定义结构体,我们可以在读取响应内容的同时执行回调操作。这样,我们就能够在处理HTTP请求的过程中实现更加灵活和自定义的操作,提升代码的可维护性和扩展性

问题内容

我们有一个有效的 golang 程序,可以从大华相机获取快照/图像。我们希望对此进行增强,为以下 URI 添加读取回调函数 – http://192.168.x.x/cgi-bin/eventManager.cgi?action=attach&codes=[VideoMotion]。此 URI 使套接字从相机端保持打开状态,相机通过它不断发送事件。

我们尝试使用 go-curl,因为它支持注册读取回调。但是,该软件包不支持 MIPS 架构。因此,我们无法使用它。任何建议/帮助都是有益的。这是快照获取的工作代码。

package main

import (
“fmt”
“log”
“net/http”

“github.com/icholy/digest”
)

const (
username = “xxxxx”
password = “xxxxx”
uri = “http://192.168.x.x/cgi-bin/snapshot.cgi”
)

func main() {
client := &http.Client{
Transport: &digest.Transport{
Username: username,
Password: password,
},
}

resp, err := client.Get(uri)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()

if resp.StatusCode != http.StatusOK {
log.Fatalf(“Error: Status code %d”, resp.StatusCode)
} else {
fmt.Println(“Snapshot fetched”)
}

// Perform next steps
}

解决方法

这是我的误解,认为 client.Get(uri) 调用被阻止。 @kotix 的以下评论让我重新思考代码。在client.Get(uri)下面添加打印后,确认继续执行。

这是在事件到达时打印事件的完整代码。

package main

import (
“log”
“net/http”
“io”
“github.com/icholy/digest”
)

const (
username = “xxxx”
password = “xxxx”
uri = “http://192.168.x.xxx/cgi-bin/eventManager.cgi?action=attach&codes=[VideoMotion]”
)

func main() {
client := &http.Client{
Transport: &digest.Transport{
Username: username,
Password: password,
},
}

resp, err := client.Get(uri)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()

log.Print(“Coming here”);
if resp.StatusCode != http.StatusOK {
log.Fatalf(“Error: Status code %d”, resp.StatusCode)
} else {
buffer := make([]byte, 4096) // Adjust the buffer size as needed

for {
n, err := resp.Body.Read(buffer)
if err != nil && err != io.EOF {
log.Fatal(err)
}

if n > 0 {
// Process the chunk of data
bodyString := string(buffer[:n])
log.Print(bodyString)
}

if err == io.EOF {
break
}
}
}
}

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
prtyaaL2
粉丝 1 资源 1949 + 关注 私信
最近热门资源
银河麒麟桌面操作系统备份用户数据  127
统信桌面专业版【全盘安装UOS系统】介绍  122
银河麒麟桌面操作系统安装佳能打印机驱动方法  114
银河麒麟桌面操作系统 V10-SP1用户密码修改  105
最近下载排行榜
银河麒麟桌面操作系统备份用户数据 0
统信桌面专业版【全盘安装UOS系统】介绍 0
银河麒麟桌面操作系统安装佳能打印机驱动方法 0
银河麒麟桌面操作系统 V10-SP1用户密码修改 0
作者收入月榜
1

prtyaa 收益393.62元

2

zlj141319 收益218元

3

1843880570 收益214.2元

4

IT-feng 收益209.03元

5

风晓 收益208.24元

6

777 收益172.71元

7

Fhawking 收益106.6元

8

信创来了 收益105.84元

9

克里斯蒂亚诺诺 收益91.08元

10

技术-小陈 收益79.5元

请使用微信扫码

加入交流群

请使用微信扫一扫!