네트워크 요청에 PHP의 컬 확장을 사용할 때 개발자는 종종 CURL_CLOSE () 에 전화하여 컬 세션을 닫습니다. 그러나 많은 사람들이 디버깅 할 때이 문제에 직면합니다. Curl_Close () 가 호출되면 오류 메시지를 포함하여 세션과 관련된 리소스가 릴리스됩니다.
이 기사는 세션을 마치기 전에 CURL에서 가능한 오류를 얻고 디버깅하는 방법을 설명하고 실용적인 제안 및 샘플 코드를 제공합니다.
curl_close ()는 curl_init () 에 의해 생성 된 컬 핸들을 릴리스합니다. 일단 출시되면 더 이상 Curl_Error () 또는 Curl_Errno ()를 호출하여 오류 메시지를 볼 수 없습니다. 이를 위해서는 손잡이를 닫기 전에 디버깅 또는 녹음을 위해 오류 정보를 제 시간에 얻어야합니다.
다음은 표준 요청 프로세스이며 오류 정보를 얻는시기에주의를 기울입니다.
<?php
$url = "https://gitbox.net/api/data";
// 초기화 cURL 세션
$ch = curl_init();
// 설정 cURL 옵션
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 요청을 실행하십시오
$response = curl_exec($ch);
// 在폐쇄세션前获取실수信息
if (curl_errno($ch)) {
$errorCode = curl_errno($ch);
$errorMessage = curl_error($ch);
error_log("cURL 실수 [$errorCode]: $errorMessage");
} else {
// 처리 응답
echo "응답 내용: " . $response;
}
// 폐쇄 cURL 세션
curl_close($ch);
curl_error () 및 curl_errno () 외에도 다음 방법을 사용하여 추가 디버그 할 수도 있습니다.
Curlopt_verbose를 true 로 설정하여 PHP가 요청 프로세스의 세부 정보를 표준 오류 출력에 출력하여 CLI 모드에서 디버깅에 적합합니다.
curl_setopt($ch, CURLOPT_VERBOSE, true);
로그 파일에 장황한 정보를 작성하려면 다음과 같습니다.
$verbose = fopen('php://temp', 'w+');
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_STDERR, $verbose);
요청이 완료되면 로그 컨텐츠를 읽을 수 있습니다.
rewind($verbose);
$verboseLog = stream_get_contents($verbose);
error_log("cURL 디버깅 정보: \n" . $verboseLog);
때로는 요청 자체에 네트워크 오류가 없지만 서버는 잘못된 HTTP 상태 코드를 반환합니다. 다음과 같이 확인할 수 있습니다.
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($httpCode !== 200) {
error_log("HTTP 상태 코드: $httpCode");
}
멀티플렉싱 및 오류 캡처를 용이하게하기 위해 CURL 요청은 기능으로 캡슐화 될 수 있습니다.
function fetchData($url) {
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 10,
]);
$response = curl_exec($ch);
if (curl_errno($ch)) {
$error = curl_error($ch);
curl_close($ch);
throw new Exception("cURL 요청이 실패했습니다: " . $error);
}
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode !== 200) {
throw new Exception("HTTP 상태 코드실수: " . $httpCode);
}
return $response;
}
try {
$data = fetchData("https://gitbox.net/api/data");
echo "성공하십시오: $data";
} catch (Exception $e) {
error_log("예외 캡처: " . $e->getMessage());
}
네트워크 요청에 PHP의 CURL을 사용하는 경우 디버깅의 핵심은 세션을 닫기 전에 정시에 오류 정보를 얻는 것 입니다. Curl_errno () , curl_error () , curl_getinfo () 및 Curlopt_verbose 와 같은 도구를 합리적으로 사용하여 개발자는 문제를 효과적으로 찾아 프로그램 안정성을 향상시킬 수 있습니다. Curl_Close () 후에 오류가 발생하거나 디버그 정보를 얻으려고 시도하지 마십시오. 그때까지 너무 늦었 기 때문입니다.