>  기사  >  백엔드 개발  >  완료되기 전에 Go HTTP 클라이언트 POST 요청을 중단하는 방법은 무엇입니까?

완료되기 전에 Go HTTP 클라이언트 POST 요청을 중단하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-27 07:50:09661검색

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

Go HTTP 클라이언트 POST 요청을 조기에 중단

Go에서 http.Client 라이브러리는 일반적으로 클라이언트 측 HTTP 요청에 사용됩니다. 장기 폴링 작업을 수행할 때 사용자 작업이나 기타 이벤트로 인해 요청을 조기에 중단해야 할 수도 있습니다.

클라이언트 측 요청을 선점하거나 취소하는 표준 접근 방식은 다음을 사용하여 시간 초과를 설정하는 것입니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.