Go HTTP クライアントの POST リクエストを完了前に中止するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-27 07:50:09
オリジナル
659 人が閲覧しました

How to Abort a Go HTTP Client POST Request Before Completion?

Go HTTP クライアント POST リクエストを途中で中止する

Go では、クライアント側の HTTP リクエストに http.Client ライブラリがよく使用されます。長時間ポーリング操作を実行する場合、ユーザーのアクションやその他のイベントによりリクエストを途中で中止する必要がある場合があります。

クライアント側リクエストをプリエンプトまたはキャンセルする標準的なアプローチは、次を使用してタイムアウトを設定することです。 http.トランスポート。ただし、このメカニズムでは、ユーザーが開始したアクションではなく、タイムアウトに基づくキャンセルのみが許可されます。

より柔軟な解決策は、http.Request.WithContext 関数を利用することです。この関数を使用すると、リクエストを context.Context に関連付けることができます。その後、コンテキストをキャンセルしたり、期限を設定して、いつでもキャンセルできるようにすることができます。

このアプローチを実装するには:

  1. 通常どおり http.Request を作成します。
  2. req.WithContext(ctx) を使用してリクエストをコンテキストに関連付けます。コンテキストは、context.WithDeadline または context.WithCancel を使用して作成できます。
  3. 変更されたリクエスト オブジェクト (req) を使用して、client.Do メソッドを使用してリクエストを作成します。

例:

import (
    "context"
    "net/http"
)

// Create a context with a user-specified timeout or cancellation.
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel() // Remember to cancel the context when done.

// Create an HTTP request.
req, err := http.NewRequest("POST", "http://example.com", nil)
if err != nil {
    // Handle error.
}

// Add headers or other request-specific information.

// Associate the request with the context.
req = req.WithContext(ctx)

// Perform the request.
resp, err := client.Do(req)
if err != nil {
    // Handle error.
}
// ... // Handle the response as usual.
ログイン後にコピー

このアプローチを使用すると、コンテキストがキャンセルされた場合、または期限が切れた場合、リクエストは自動的に中止されます。有効期限が切れます。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート