ホームページ  >  記事  >  バックエンド開発  >  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 では、net/http GET リクエストの読み取りコールバックを設定して go-curl と同様の機能を実現する方法を紹介します。 net/http ライブラリを使用して GET リクエストを開始する場合、http.Client 構造体と http.Request 構造体の関連メソッドを使用して読み取りコールバック関数を設定できます。 http.Response.Body の値を io.Reader インターフェイスを実装するカスタム構造に設定することで、応答コンテンツを読み取りながらコールバック操作を実行できます。このようにして、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
}

回避策

client.Get(uri) 呼び出しがブロックされたというのは私の誤解でした。 @kotix による次のコメントにより、コードを再考するようになりました。 client.Get(uri) 以下に印刷を追加した後、実行を続行することを確認します。

これは、イベントが到着したときにそれを出力するための完全なコードです。

リーリー

以上がgo-curlを使用するようにnet/http GETリクエストの読み取りコールバックを設定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。