현재 위치: > 최신 기사 목록> Curl_Close로 CURL 세션을 종료 한 후 디버깅 정보를 보는 방법은 무엇입니까?

Curl_Close로 CURL 세션을 종료 한 후 디버깅 정보를 보는 방법은 무엇입니까?

gitbox 2025-05-26

HTTP 요청에 PHP의 CURL Extension을 사용하는 경우 Curl_Close ()는 요청이 완료된 후에는 자유 리소스에 일반적으로 사용되는 기능입니다. 그러나 개발자가 요청 또는 문제 해결 문제를 디버그 할 때 DNS 해결 시간, 연결 시간, 응답 헤더 등과 같은 요청 프로세스 중에 자세한 정보를 얻기를 원합니다. 그런 다음 질문은 다음과 같습니다.

1. curl_getInfo는 curl_close 전에 호출해야합니다

PHP는 http 상태 코드, 총 시간 소비, 점프 수 등과 같은 컬 핸들의 작동 정보를 얻기 위해 curl_getinfo () 함수를 제공하지만 Curl_Close () 전에이 함수를 호출해야합니다 . 세션이 닫히면 관련 핸들 리소스가 파괴됩니다. 현재 디버그 정보를 얻으려고하면 빈 데이터가 반환되거나 오류가 발생합니다.

 $ch = curl_init('https://gitbox.net/api/example');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);

// 디버그 정보를 얻으십시오,들어 있어야합니다 curl_close 전에
$info = curl_getinfo($ch);

curl_close($ch);

print_r($info);

2.보다 자세한 로그 : Curlopt_verbose를 사용하여 디버깅 정보를 출력

CURL의 내부 작동 로그와 같은 하위 수준 디버깅 정보를 보려면 Curlopt_verbose 옵션을 활성화 할 수 있습니다. 이렇게하면 디버그 로그를 지정된 스트림 리소스에 씁니다. 일반적으로 파일 또는 PHP 표준 출력으로 출력하는 데 사용됩니다.

예 : Verbose Logs를 파일에 작성하십시오

 $logFile = fopen(__DIR__ . '/curl_debug.log', 'w');

$ch = curl_init('https://gitbox.net/api/example');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_VERBOSE, true); // 자세한 로깅을 활성화합니다
curl_setopt($ch, CURLOPT_STDERR, $logFile); // 로그 출력 파일을 지정합니다

$response = curl_exec($ch);
curl_close($ch);

fclose($logFile);

이 코드는 연결 프로세스, 요청 헤더, 응답 헤더 등과 같은 디버그 정보를 CURL_DEBUG.LOG 파일에 작성합니다.이 파일은 HTTPS 핸드 셰이크, 리디렉션 및 기타 문제를 해결하는 데 매우 적합합니다.

3. 선택적 확장 솔루션 : CURL을 사용하여 HTTP 로그 캡슐화를 구현합니다.

실제 프로젝트에서 요청 로그, 오류 메시지 등을 처리하려면 통합 방식으로 간단한 로깅 클래스 구현과 같은 CURL 요청을 캡슐화 할 수 있습니다.

 function curlRequestWithLog($url, $logPath) {
    $fp = fopen($logPath, 'w');

    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_VERBOSE => true,
        CURLOPT_STDERR => $fp
    ]);

    $response = curl_exec($ch);
    $info = curl_getinfo($ch);

    curl_close($ch);
    fclose($fp);

    return ['response' => $response, 'info' => $info];
}

$result = curlRequestWithLog('https://gitbox.net/api/test', __DIR__ . '/debug.log');
print_r($result['info']);

캡슐화를 통해 개발자는 요청 및 로그의 관리 프로세스를 쉽게 제어하여 각 요청에서 반복적 인 구성을 피할 수 있습니다.

4. 요약

  1. curl_getInfo ()가 curl_close () 전에 호출해야합니다.

  2. 자세한 디버깅 정보를 보려면 Curlopt_verbose를 활성화하고 Curlopt_stderr 와 함께 파일에 로그를 출력하십시오.

  3. 캡슐화를 통해 로그 출력 및 디버깅 프로세스를보다 잘 제어 할 수 있습니다.

컬 기반 PHP 네트워크 요청 기능을 개발하고 유지하려면 이러한 디버깅 기술을 마스터하는 것이 매우 필요합니다. 특히 타사 API (예 : Gitbox 인터페이스)에 연결할 때 요청 세부 사항을 정확하게 파악할 수 있으면 문제 조사 효율성이 크게 향상됩니다.