>  기사  >  백엔드 개발  >  go-curl을 사용하는 것처럼 net/http GET 요청에 대한 읽기 콜백을 설정하는 방법은 무엇입니까?

go-curl을 사용하는 것처럼 net/http GET 요청에 대한 읽기 콜백을 설정하는 방법은 무엇입니까?

WBOY
WBOY앞으로
2024-02-11 09:24:08365검색

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

PHP 편집기 Xigua는 go-curl과 유사한 기능을 달성하기 위해 net/http GET 요청에 대한 읽기 콜백을 설정하는 방법을 소개합니다. net/http 라이브러리를 사용하여 GET 요청을 시작할 때 http.Client 및 http.Request 구조의 관련 메서드를 사용하여 읽기 콜백 함수를 설정할 수 있습니다. io.Reader 인터페이스를 구현하는 사용자 정의 구조에 http.Response.Body 값을 설정하면 응답 내용을 읽는 동안 콜백 작업을 수행할 수 있습니다. 이러한 방식으로 우리는 HTTP 요청을 처리하는 과정에서 보다 유연하고 맞춤화된 작업을 달성하여 코드의 유지 관리성과 확장성을 향상시킬 수 있습니다.

질문 내용

Dahua 카메라에서 스냅샷/이미지를 얻을 수 있는 작동하는 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
}

Workaround

client.Get(uri) 호출이 차단된 것은 저의 착각이었습니다. @kotix의 다음 댓글은 내 코드를 다시 생각하게 만들었습니다. client.Get(uri) 아래에 인쇄를 추가한 후 실행을 계속하려면 확인하세요.

이벤트가 도착했을 때 이를 인쇄하는 완전한 코드입니다.

으아아아

위 내용은 go-curl을 사용하는 것처럼 net/http GET 요청에 대한 읽기 콜백을 설정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제