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 サイトの他の関連記事を参照してください。