ホームページ >バックエンド開発 >Golang >Golang で HTTP POST リクエストを途中で終了するにはどうすればよいですか?

Golang で HTTP POST リクエストを途中で終了するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-25 18:28:11425ブラウズ

How to Prematurely Terminate an HTTP POST Request in Golang?

Golang での HTTP POST リクエストの早期終了

http.Client を使用してロングポーリング クライアントを実装するコンテキストでは、 HTTP POST リクエストを途中で閉じたりキャンセルしたりすることが頻繁に発生します。従来のアプローチでは、別のゴルーチンで応答本文 (resp.Body.Close()) を閉じる必要がありましたが、通常、応答の読み取り中にクライアントがブロックされるため、複雑さが生じます。

ただし、現在推奨されている戦略は、リクエストのキャンセルには、期限があるコンテキスト、または必要に応じてキャンセルできるコンテキストの使用が含まれます。これは、http.Request.WithContext メソッドを通じて実現されます。

この戦略をコードに組み込む方法は次のとおりです。

import (
    "context"
    "net/http"
)

// ...

// Create a context with a deadline or that can be canceled
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()

req, err := http.NewRequest("POST", "http://example.com", bytes.NewBuffer(jsonPostBytes))
// ...

// Add the context to the request
req = req.WithContext(ctx)

// Perform the request
resp, err := client.Do(req)

リクエストにコンテキストを設定することで、その後の操作はそのリクエストは、そのコンテキストの期限またはキャンセル状態を尊重します。たとえば、リクエストが完了する前にコンテキストがキャンセルされた場合、基礎となるトランスポートはエラーを受け取り、リクエストは中止されます。これにより、クライアント側からの HTTP POST リクエストを途中で終了するための明確かつ簡潔なメカニズムが提供されます。

以上がGolang で HTTP POST リクエストを途中で終了するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。