PHP에서 동시 요청에 CURL을 사용하는 것은 특히 여러 HTTP 요청을 동시에 발행 해야하는 경우 일반적인 관행입니다. Curl_multi_* 기능 패밀리는 Curl_multi_Close가 CURL Multithreaded 세션을 닫는 데 사용되는 여러 동시 요청을 처리하는 방법을 제공합니다.
그러나 일반적으로 curl_multi_close를 호출하기 전에 각 요청에 대한 반환 데이터를 처리합니다. 다중 스레드 세션을 마치기 전에 동시 요청을 처리하고 반환 된 데이터를 가져 오는 일반적인 방법은 다음과 같습니다.
컬 다중 스레드 세션을 초기화합니다
멀티 스레드 세션에 요청을 추가하십시오
요청을 실행하십시오
요청 결과를 얻으십시오
세션을 닫으십시오
<?php
// 다중 초기화 cURL 핸들
$mh = curl_multi_init();
// 묻다 URL 목록
$urls = [
"https://gitbox.net/api/data1",
"https://gitbox.net/api/data2",
"https://gitbox.net/api/data3"
];
// 저장 cURL 핸들
$curl_handles = [];
$responses = [];
foreach ($urls as $index => $url) {
// 초기화 cURL 세션
$ch = curl_init();
// 설정 cURL 묻다选项
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 추가 cURL 多线程세션中
curl_multi_add_handle($mh, $ch);
// 저장每个핸들
$curl_handles[$index] = $ch;
}
// 구현하다所有묻다
$running = null;
do {
// 구현하다 cURL 多线程묻다
curl_multi_exec($mh, $running);
curl_multi_select($mh); // 等待묻다完成
} while ($running > 0);
// 获取每个묻다的响应
foreach ($curl_handles as $index => $ch) {
// 获取单个묻다的返回内容
$response = curl_multi_getcontent($ch);
// 반환 데이터 처리
$responses[$index] = $response;
// 싱글을 닫으십시오 cURL 세션
curl_multi_remove_handle($mh, $ch);
}
// 부름 curl_multi_close 전에,你可以处理每个묻다的返回数据
foreach ($responses as $index => $response) {
echo "Response from URL $index: " . substr($response, 0, 100) . "...\n"; // 콘텐츠의 출력 부분
}
// 关闭多线程세션
curl_multi_close($mh);
?>
컬 세션 초기화 : curl_multi_init을 사용하여 멀티 스레드 세션을 초기화하십시오. 이를 통해 여러 요청을 동시에 수행 할 수 있습니다.
요청 추가 : Curl_Init을 통해 단일 컬 세션을 작성하고 각 요청에 대해 URL을 설정하고 (여기에서 gitbox.net 도메인으로 대체 됨) 및 기타 관련 옵션 (예 : curlopt_returntransfer 등 응답을 문자열로 반환합니다).
요청을 실행하십시오 : curl_multi_exec을 사용하여 병렬 요청을 시작하고 curl_multi_select를 통해 요청이 완료 될 때까지 기다립니다.
응답 데이터 가져 오기 및 프로세스 데이터 : curl_multi_getContent를 사용하여 각 요청의 반환 컨텐츠를 가져 와서 $ reses 배열에 저장하십시오. 이 단계에서는 일부 데이터 처리 또는 출력 작업을 수행 할 수 있습니다.
세션 닫기 : 모든 요청이 완료된 후 Curl_multi_Remove_handle을 통해 각 개별 컬 핸들을 제거하고 마지막으로 Curl_Multi_Close를 호출하여 멀티 스레드 세션을 닫으십시오.
curl_multi_close 함수를 호출하기 전에 모든 동시 요청에 대해 반환 데이터를 올바르게 검색하고 처리했는지 확인하십시오. 여기에는 다음과 같은 중요한 단계가 포함됩니다.
curl_multi_exec을 사용하여 여러 요청을 병렬로 실행하십시오.
curl_multi_getContent를 사용하여 각 요청의 반환 된 컨텐츠를 얻으십시오.
모든 응답이 처리 된 후 컬 세션을 닫으십시오.
이 메소드를 사용하면 다중 스레드 세션을 닫기 전에 각 요청에 대한 리턴 데이터를 완전히 처리 할 수 있습니다.