Go HTTP クライアント POST リクエストを途中で中止する
Go では、クライアント側の HTTP リクエストに http.Client ライブラリがよく使用されます。長時間ポーリング操作を実行する場合、ユーザーのアクションやその他のイベントによりリクエストを途中で中止する必要がある場合があります。
クライアント側リクエストをプリエンプトまたはキャンセルする標準的なアプローチは、次を使用してタイムアウトを設定することです。 http.トランスポート。ただし、このメカニズムでは、ユーザーが開始したアクションではなく、タイムアウトに基づくキャンセルのみが許可されます。
より柔軟な解決策は、http.Request.WithContext 関数を利用することです。この関数を使用すると、リクエストを context.Context に関連付けることができます。その後、コンテキストをキャンセルしたり、期限を設定して、いつでもキャンセルできるようにすることができます。
このアプローチを実装するには:
例:
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 サイトの他の関連記事を参照してください。