PHP에서 Curl_share_init은 매우 유용한 기능입니다. 이를 통해 여러 CURL 요청이 세션, 쿠키 또는 파일 등과 같은 동일한 리소스를 공유 할 수있어 리소스에 대한 반복 요청의 오버 헤드를 효과적으로 줄이고 성능을 향상시킬 수 있습니다. 실제 응용 프로그램에서는 여러 요청을 중앙에서 관리, 구성 또는 차단해야 할 수 있으며 미들웨어 인터셉터가 특히 중요합니다.
이 기사에서는 Curl_share_init을 지원하는 미들웨어 인터셉터를 구축하는 방법을 설명하고 실제 예제 로이 프로세스를 더 잘 이해하는 데 도움이됩니다.
미들웨어 인터셉터는 요청 및 응답을 가로 채는 데 사용되는 구성 요소이며, 요청이 들어가기 전에 및 응답 잎이 나온 후 특정 작업을 수행 할 수 있습니다. 일반적으로 로그를 기록하고 인증 처리, 캐시 제어, 요청 헤더 추가, 응답 형식 등에 사용됩니다.
우리의 경우, 인터셉터는 CURL 요청이 발생하기 전후에 몇 가지 추가 처리를 수행합니다. Curl_share_init을 지원하는 미들웨어의 경우, 우리의 목표는 여러 컬어 요청에서 한 세션 리소스를 공유 할 수 있도록하여 매번 새로운 CURL 세션의 초기화를 피하는 것입니다.
우리는 모든 CURL 요청 차단을 처리하는 데 특별히 사용되는 미들웨어 클래스를 만들 수 있습니다. 이 클래스는 몇 가지 기본 초기화 및 리소스 관리 기능을 제공합니다.
class CurlMiddleware
{
private $shareHandle;
public function __construct()
{
// 공유 리소스 초기화
$this->shareHandle = curl_share_init();
}
public function __destruct()
{
// 공유 자원을 파괴하십시오
if ($this->shareHandle) {
curl_share_close($this->shareHandle);
}
}
public function handleRequest($url, $options = [])
{
// 설정 cURL 자원을 공유하십시오
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_SHARE, $this->shareHandle);
// 설정其他 cURL 옵션
curl_setopt_array($ch, $options);
// 요청을 실행하십시오
$response = curl_exec($ch);
if (curl_errno($ch)) {
// 오류 처리
echo 'Curl error: ' . curl_error($ch);
}
curl_close($ch);
return $response;
}
}
위의 코드에서는 기본적인 CurlMiddleware 클래스를 구현했습니다. 미들웨어를 만들기 위해 인터셉트 로직을 추가하여 요청과 응답을 제어 할 수 있습니다.
핸들러 Quest 메소드에서 요청 또는 응답을 가로 채고 수정하기 위해 미리 및 사후 수술을 추가 할 수 있습니다.
class CurlMiddleware
{
private $shareHandle;
public function __construct()
{
// 공유 리소스 초기화
$this->shareHandle = curl_share_init();
}
public function __destruct()
{
// 공유 자원을 파괴하십시오
if ($this->shareHandle) {
curl_share_close($this->shareHandle);
}
}
public function beforeRequest($url, $options)
{
// 요청을 보내기 전에 수행 된 작업(예를 들어, 수정하십시오 URL 或설정额外的옵션)
$parsedUrl = parse_url($url);
$url = 'https://m66.net' . $parsedUrl['path']; // 도메인 이름을 바꾸십시오
return $url;
}
public function afterRequest($response)
{
// 요청 후 수행 된 조치(예를 들어 로깅、응답 서식)
// 여기서 우리는 응답을 수정하거나 로그를 기록 할 수 있습니다.
return $response;
}
public function handleRequest($url, $options = [])
{
// 수술 전:개정하다 URL 或者其他옵션
$url = $this->beforeRequest($url, $options);
// 설정 cURL 자원을 공유하십시오
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_SHARE, $this->shareHandle);
// 설정其他 cURL 옵션
curl_setopt_array($ch, $options);
// 요청을 실행하십시오
$response = curl_exec($ch);
if (curl_errno($ch)) {
// 오류 처리
echo 'Curl error: ' . curl_error($ch);
}
curl_close($ch);
// 수술 후:처리 응답
return $this->afterRequest($response);
}
}
이제 CurlMiddleware 클래스는 각 요청 전후에 인터셉트 로직을 실행할 수 있습니다. 실제로 사용하면 미들웨어 인스턴스 만 생성하고 handlerequest 메소드를 호출하여 요청을해야합니다.
$middleware = new CurlMiddleware();
$options = [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true
];
// 묻다 URL
$url = 'https://example.com/api/data';
// 发送묻다
$response = $middleware->handleRequest($url, $options);
// 인쇄 응답 결과
echo $response;
Curl_share_init을 사용하므로 여러 CURL 요청은 동일한 리소스 (예 : 쿠키, 세션 정보 등)를 공유합니다. 이것은 여러 요청에 따라 주를 공유 해야하는 상황에 매우 유용합니다. 미들웨어에서 모든 CURL 요청은 동일한 공유 핸들을 사용하여 동일한 세션 데이터를 공유하도록합니다.
경우에 따라 Curl_share_init 의 동작을 구성해야 할 수도 있습니다. 특히 여러 요청이 공유 리소스에 대한 동기식 액세스가 필요한 경우에 주목해야합니다.
이 기사는 Curl_share_init을 지원하는 미들웨어 인터셉터를 구축하는 방법을 보여줍니다. 이러한 미들웨어를 통해 CURL 요청이 여러 번 시작될 때 세션 리소스 및 요청 및 응답을 공유하여 로깅, 오류 처리, URL 수정 및 기타 작업을 수행 할 수 있습니다.