현재 위치: > 최신 기사 목록> curl_multi_close를 다루는 방법 및 여전히 반환 결과를 얻으십시오.

curl_multi_close를 다루는 방법 및 여전히 반환 결과를 얻으십시오.

gitbox 2025-05-29

PHP에서 Curl_multi_* 함수는 요청의 효율성을 향상시키기 위해 여러 CURL 요청을 동시에 시작하는 데 사용됩니다. 그러나 Curl_Multi_Close를 호출하여 여러 컬 세션을 종료하면 함수가 모든 관련 핸들을 닫으므로 더 이상 요청의 반환 결과를 얻을 수 없습니다. Curl_Multi_Close를 호출 한 후에도 각 요청의 반환 결과를 얻으려면 일부 트릭이 필요합니다.

이 기사에서는 curl_multi_close 이후 모든 요청의 결과를 올바르게 얻는 방법을 설명합니다.

Curl_multi_getContent를 사용하여 반환 결과를 얻으십시오

curl_multi_close를 호출 한 후 각 컬 리 요청의 응답 내용은 curl_multi_getContent를 통해 얻을 수 있습니다. 반환 된 모든 결과를 올바르게 얻으려면 CURL 세션을 마감하기 전에 각 요청의 결과가 보존되도록해야합니다.

다음은 전체 예입니다.

 <?php
// 초기화cURL핸들
$urls = [
    'https://gitbox.net/api/endpoint1',
    'https://gitbox.net/api/endpoint2',
    'https://gitbox.net/api/endpoint3'
];

$multiCurl = curl_multi_init();
$curlHandles = [];

// 각각에 대해URL만들다cURL핸들并添加到多重请求队列
foreach ($urls as $url) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 반환 된 콘텐츠를 얻으십시오
    curl_multi_add_handle($multiCurl, $ch);
    $curlHandles[] = $ch;
}

// 모든 요청을 수행하십시오
$running = null;
do {
    curl_multi_exec($multiCurl, $running);
    curl_multi_select($multiCurl);
} while ($running > 0);

// 각 요청의 결과를 얻으십시오
$responses = [];
foreach ($curlHandles as $ch) {
    $responses[] = curl_multi_getcontent($ch);
    curl_multi_remove_handle($multiCurl, $ch); // 从多重请求队列中移除핸들
}

// 폐쇄cURL여러 대화
curl_multi_close($multiCurl);

// 각 요청에 대한 반환 결과를 출력하십시오
foreach ($responses as $response) {
    echo $response . "\n";
}
?>

코드 구문 분석

  1. 여러 요청 핸들 초기화 :

    • 먼저 모든 URL을 요청할 $ URL 배열을 정의합니다. 이 예에서는 모든 URL이 gitbox.net 도메인 이름으로 대체됩니다.

    • 그런 다음 각 URL에 대해 컬 핸들 $ ch를 생성하고 여러 컬 세션에 추가합니다.

  2. 요청을 실행하십시오 .

    • curl_multi_exec ()를 사용하여 세션에 추가 된 모든 요청을 실행하십시오. 우리는 curl_multi_select ()를 사용하여 요청이 완료 될 때까지 유휴 상태가되지 않도록합니다.

  3. 요청 결과를 얻으십시오 .

    • 모든 요청이 완료된 후 Curl_multi_getContent ($ ch)를 사용하여 각 요청의 반환 내용을 가져 와서 $ zeses 배열에 저장합니다.

  4. 정리 :

    • Curl_multi_Remove_handle ($ multicurl, $ ch)을 사용하여 여러 세션에서 각 컬 핸들을 제거하고 Curl_multi_Close ()를 호출하여 전체 컬 세션을 닫습니다.

  5. 출력 응답 내용 :

    • 마지막으로 $ reses 배열을 반복하고 각 요청의 응답 내용을 출력하십시오.

주목해야 할 것

  • 비동기 처리 : Curl_multi_* 함수의 가장 큰 장점 중 하나는 동시에 여러 요청을 보낼 수 있다는 것입니다. 이는 특히 동시 요청에 유용합니다. 다중 요청 시나리오에서도 Curl_multi_getContent는 각 요청의 반환 결과를 올바르게 얻을 수 있습니다.

  • 요청 시간 초과 처리 : 실제 시나리오에서는 서버 응답이 느리기 때문에 다른 요청을 차단하는 요청을 피하기 위해 Curlopt_Timeout 과 같은 각 요청에 대한 타임 아웃 옵션을 설정해야 할 수도 있습니다.

  • 오류 처리 : CURL을 사용할 때는 요청이 성공했는지 확인하고 Curl_ERRRNO ($ CH)를 사용하여 오류 코드를 가져와 요청의 문제를 식별하는 데 도움이됩니다.