현재 위치: > 최신 기사 목록> Curl_multi_Close 요청을 닫을 때 리디렉션 된 응답을 처리하는 방법

Curl_multi_Close 요청을 닫을 때 리디렉션 된 응답을 처리하는 방법

gitbox 2025-05-12

CURL_MULTI_* 시리즈 기능은 동시 요청을 위해 PHP의 CURL 확장을 사용할 때 매우 일반적입니다. curl_multi_close ()는 자원을 해제하고 CURL 핸들 컬렉션을 닫는 데 사용되는 기능입니다. 그러나 많은 개발자들이 리디렉션 (예 : 301, 302)을 포함한 응답을 다룰 때 당황 할 수 있습니다.

이 기사에서는 요청을 닫을 때 중요한 리디렉션 응답을 잃지 않도록 원칙과 실용적인 관점에서 Curl_Multi_Close ()를 올바르게 사용하도록 가르칩니다.

curl_multi_close의 기본 역할을 이해하십시오

우선 Curl_multi_Close ($ multi_handle) 의 주요 기능은 다음과 같습니다.

  • 멀티 핸들러를 닫으십시오

  • 모든 관련 리소스를 동시에 해제하십시오

중요한 팁 :

  • curl_multi_close () 는 리소스 청소를 담당하며 자동으로 리디렉션을 처리하지 않습니다 .

  • 리디렉션 처리는 요청 실행 단계에서 완료해야합니다 (예 : Curl_Multi_Exec () 이전의 옵션 설정 등).

  • 마감 후 리디렉션 정보를 포함하여 더 이상 요청 응답 데이터를 얻을 수 없습니다.

따라서 curl_multi_close ()를 호출하기 전에 모든 요청이 완전히 실행되었으며 필요한 응답이 읽혀 졌는지 확인해야합니다.

리디렉션 응답을 올바르게 처리하십시오

Curl이 리디렉션을 올바르게 따르고 닫기 전에 최종 응답을 얻으려면 다음을 수행해야합니다.

  1. 자동 후속 리디렉션을 허용하도록 컬 옵션을 설정하십시오 .

  2. 요청을 완전히 실행 하고 필요한 모든 데이터를 검색하십시오.

  3. 마지막으로, Curl_multi_Close ()가 자원을 해제하도록 호출됩니다.

샘플 코드

 <?php
// 다중 핸들 프로세서를 만듭니다
$multiHandle = curl_multi_init();

// 별도를 초기화하십시오 cURL 세션
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://gitbox.net/redirect-example');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 자동 후속 리디렉션을 허용합니다
curl_setopt($ch, CURLOPT_MAXREDIRS, 5); // 최대를 따르십시오5리디렉션

// 将세션添加到多句柄处理器
curl_multi_add_handle($multiHandle, $ch);

// 요청을 실행하십시오
$running = null;
do {
    $status = curl_multi_exec($multiHandle, $running);
    if ($status > 0) {
        echo "cURL Error: " . curl_multi_strerror($status);
    }
    // 활성 연결을 기다리고 있습니다
    curl_multi_select($multiHandle);
} while ($running > 0);

// 닫기 전에 컨텐츠와 정보를 얻으십시오
$response = curl_multi_getcontent($ch);
$info = curl_getinfo($ch);

// 응답 내용 인쇄
echo "Final URL: " . $info['url'] . PHP_EOL;
echo "HTTP Code: " . $info['http_code'] . PHP_EOL;
echo "Response Body: " . $response . PHP_EOL;

// 청소
curl_multi_remove_handle($multiHandle, $ch);
curl_close($ch);
curl_multi_close($multiHandle);
?>

주요 해석

  • curlopt_followlocation은 자동으로 리디렉션을 처리하도록 true 로 설정되었습니다.

  • curl_multi_exec이 완전히 실행 된 후 Curl_multi_getContent ()curl_getInfo ()를 사용하여 최종 응답 정보를 얻으십시오.

  • curl_multi_close ()는 데이터를 완전히 가져온 후에 만 ​​안전하게 호출 할 수 있습니다.

Curl_multi_Close () 전에이 단계를 올바르게 처리하지 않으면 리디렉션 된 최종 응답 데이터를 얻을 수 없습니다.

일반적인 오류 예제

다음은 실수가 발생하기 쉬운 방법입니다.

 <?php
$multiHandle = curl_multi_init();
$ch = curl_init('https://gitbox.net/redirect-example');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($multiHandle, $ch);

// 실수:실행이 완료되지 않은 경우 직접 닫으십시오
curl_multi_close($multiHandle);

$response = curl_multi_getcontent($ch); // 이 시점에서 얻은 내용은 비어 있거나 정의되지 않았을 수 있습니다.
?>

문제 분석 :
요청이 완료되기 전에 멀티 핸들이 닫히므로 후속 리디렉션 응답 및 데이터를 올바르게 얻을 수 없습니다.

요약

  • curl_multi_close ()는 리디렉션을 처리하지 않으며 자원을 청소하는 것만 담당합니다.

  • curlopt_followlocation을 설정하여 리디렉션을 설정해야하며 닫기 전에 요청 처리가 완료됩니다.

  • curl_multi_close () 전에 필요한 모든 데이터를 추출 하십시오.

  • 올바른 순서 (실행 → 컨텐츠 가져 오기 → 핸들 제거 → 멀티 닫기)로 요청이 완료되고 데이터가 손실되지 않도록하십시오.

이러한 세부 사항을 마스터하면 특히 응답을 방향 전환 할 때 복잡한 동시 요청을 쉽게 처리 할 수 ​​있습니다!