본문 바로가기
PHP

php curl 오류 디버깅 테스트

by 씨엔아이소프트 2024. 5. 22.
반응형

 

CentOS 7에서 cURL이 갑자기 작동하지 않는다면, 여러 가지 이유가 있을 수 있습니다. 아래는 그 원인과 해결 방법을 확인하는 단계별 가이드입니다

 

1.. 네트워크 문제 확인
가장 먼저 네트워크 연결이 정상인지 확인합니다.

ping google.com
이 명령어로 외부 네트워크에 접근 가능한지 확인하세요.

2. DNS 문제 확인
DNS 문제로 인해 cURL이 작동하지 않을 수 있습니다.

nslookup google.com
DNS 서버가 제대로 동작하는지 확인하세요.

3. cURL 설치 확인
cURL이 올바르게 설치되었는지 확인합니다.
curl --version
cURL이 설치되지 않았거나 문제가 있다면, 다시 설치해보세요.
sudo yum install curl

4. cURL SSL/TLS 문제 확인
SSL/TLS 인증서 문제로 인해 cURL이 실패할 수 있습니다.

curl -v https://example.com
이 명령어를 통해 SSL/TLS 오류 메시지를 확인할 수 있습니다.

5. 방화벽 설정 확인
방화벽 설정이 변경되어 cURL 요청이 차단될 수 있습니다.

sudo systemctl status firewalld
sudo iptables -L
필요한 경우 방화벽 설정을 수정하여 cURL 요청이 허용되도록 합니다.

6. SELinux 설정 확인
SELinux 설정이 cURL 실행을 방해할 수 있습니다.
SELinux가 활성화되어 있다면, 일시적으로 비활성화하여 문제가 해결되는지 확인합니다.

sudo setenforce 0

7. 업데이트 및 패치 확인
CentOS 및 cURL의 최신 업데이트와 패치가 설치되었는지 확인합니다.

sudo yum update

8. 로그 파일 확인
시스템 로그 파일을 확인하여 cURL과 관련된 오류 메시지를 찾습니다.

sudo tail -f /var/log/messages
sudo tail -f /var/log/syslog

요약
위의 단계를 따라 문제의 원인을 하나씩 확인해보세요. 일반적으로 네트워크 문제, DNS 문제, SSL/TLS 문제, 방화벽 설정, SELinux 설정 등이 주요 원인일 수 있습니다. 문제가 지속되면, 구체적인 오류 메시지를 바탕으로 추가적인 조치를 취할 수 있습니다.

추가 디버깅 테스트

<?php
$ch = curl_init();

if ($ch === false) {
    die('Failed to create cURL handle');
}

curl_setopt($ch, CURLOPT_URL, "https://www.google.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_VERBOSE, true); // cURL 세션의 디버그 정보 활성화

$response = curl_exec($ch);

if ($response === false) {
    $error_msg = curl_error($ch);
    $error_no = curl_errno($ch);
    $info = curl_getinfo($ch);
    curl_close($ch);

    echo "cURL Error: " . $error_msg . "\n";
    echo "cURL Error Number: " . $error_no . "\n";
    echo "cURL Info: " . print_r($info, true) . "\n";
} else {
    curl_close($ch);
    echo 'Success: ' . $response;
}
?>

서버 SSL/TLS 설정 확인:

  • SSL/TLS 인증서 문제일 수 있습니다. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 옵션을 추가하여 SSL 인증서 검증을 비활성화합니다. 단, 이 옵션은 보안상 좋지 않으므로 테스트용으로만 사용해야 합니다.
<?php
$ch = curl_init();

if ($ch === false) {
    die('Failed to create cURL handle');
}

curl_setopt($ch, CURLOPT_URL, "https://www.google.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // SSL 인증서 검증 비활성화
curl_setopt($ch, CURLOPT_VERBOSE, true); // cURL 세션의 디버그 정보 활성화

$response = curl_exec($ch);

if ($response === false) {
    $error_msg = curl_error($ch);
    $error_no = curl_errno($ch);
    $info = curl_getinfo($ch);
    curl_close($ch);

    echo "cURL Error: " . $error_msg . "\n";
    echo "cURL Error Number: " . $error_no . "\n";
    echo "cURL Info: " . print_r($info, true) . "\n";
} else {
    curl_close($ch);
    echo 'Success: ' . $response;
}
?>

 

CA 인증서 번들 설치 확인

먼저, CA 인증서 번들이 설치되어 있는지 확인합니다.

sudo yum install ca-certificates
sudo update-ca-trust force-enable

 

cURL 옵션에서 CA 인증서 경로 설정

PHP 코드에서 cURL 옵션으로 CA 인증서 경로를 설정합니다.

<?php
$ch = curl_init();

if ($ch === false) {
    die('Failed to create cURL handle');
}

curl_setopt($ch, CURLOPT_URL, "https://www.google.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); // SSL 인증서 검증 활성화
curl_setopt($ch, CURLOPT_CAINFO, '/etc/pki/tls/certs/ca-bundle.crt'); // CA 인증서 경로
curl_setopt($ch, CURLOPT_VERBOSE, true); // cURL 세션의 디버그 정보 활성화

$response = curl_exec($ch);

if ($response === false) {
    $error_msg = curl_error($ch);
    $error_no = curl_errno($ch);
    $info = curl_getinfo($ch);
    curl_close($ch);

    echo "cURL Error: " . $error_msg . "\n";
    echo "cURL Error Number: " . $error_no . "\n";
    echo "cURL Info: " . print_r($info, true) . "\n";
} else {
    curl_close($ch);
    echo 'Success: ' . $response;
}
?>
반응형

댓글