cURL은 URL 구문을 사용하여 파일과 데이터를 전송하는 도구로, HTTP, FTP, TELNET 등과 같은 다양한 프로토콜을 지원합니다. 가장 좋은 점은 PHP가 cURL 라이브러리도 지원한다는 것입니다. 이 기사에서는 cURL의 일부 고급 기능과 이를 PHP에서 사용하는 방법을 소개합니다.
왜 cURL을 사용하나요?
예, 다른 방법을 통해 웹 콘텐츠를 얻을 수 있습니다. 대부분의 경우, 저는 게으르고 싶어서 간단한 PHP 함수를 사용합니다:
$content = file_get_contents(" http://www.bizhicool.com ");
// 또는
$lines = file(" http://www.bizhicool.com ");
// 또는
readfile( http://www.bizhicool.com ); 그러나 이 접근 방식에는 유연성과 효과적인 오류 처리가 부족합니다. 또한 쿠키 처리, 유효성 검사, 양식 제출, 파일 업로드 등과 같은 일부 어려운 작업을 완료하는 데 사용할 수 없습니다.
cURL은 다양한 프로토콜과 옵션을 지원하고 URL 요청과 관련된 다양한 세부 정보를 제공할 수 있는 강력한 라이브러리입니다.
기본 구조 더 복잡한 기능에 대해 알아보기 전에 PHP에서 cURL 요청을 설정하는 기본 단계를 살펴보겠습니다.
초기화, 변수 설정, 실행 및 결과 얻기, cURL 핸들 해제
// 1. 초기화
$ch = 컬_초기화();
// 2. URL을 포함한 옵션 설정
cur_setopt($ch, CURLOPT_URL, " http://www.bizhicool.com ");
컬_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
컬_setopt($ch, CURLOPT_HEADER, 0);
// 3. HTML 문서의 내용을 실행하고 가져옵니다.
$output = 컬_exec($ch);
// 4. 컬 핸들 해제
컬_close($ch); 두 번째 단계(즉, 컬_setopt())가 가장 중요하며 모든 미스터리가 여기에 있습니다. URL 요청의 다양한 세부사항을 지정하기 위해 설정할 수 있는 cURL 매개변수의 긴 목록이 있습니다. 한꺼번에 읽고 이해하는 것은 어려울 수 있으므로 오늘은 더 일반적이고 유용한 옵션만 시도해 보겠습니다.
오류 확인 오류를 확인하는 명령문을 추가할 수 있습니다(필수는 아니지만).
// ...
$output = 컬_exec($ch);
if ($output === FALSE) {
echo "cURL 오류: " .
}
// ...비교할 때 "== FALSE" 대신 "=== FALSE"를 사용한다는 점에 유의하세요. 빈 출력과 실제 오류인 부울 값 FALSE를 구별해야 하기 때문입니다.
정보 가져오기 이는 cURL이 실행된 후 이 요청에 대한 정보를 가져올 수 있는 또 다른 선택적 설정입니다.
// ...
컬_exec($ch);
$info = 컬_getinfo($ch);
echo 'Get'. $info['url'] . $info['total_time'] .
// ...반환된 배열에는 다음 정보가 포함됩니다.
"url" //리소스 네트워크 주소
"content_type" //콘텐츠 인코딩
"http_code" //HTTP 상태 코드
"header_size" //헤더의 크기
"request_size" //요청 크기
"filetime" //파일 생성 시간
"ssl_verify_result" //SSL 확인 결과
"redirect_count" //점프 기술
"total_time" //총 걸린 시간
"namelookup_time" //DNS 쿼리 시간
"connect_time" //연결 시간을 기다리는 중
"pretransfer_time" //전송 전 준비 시간
"size_upload" //업로드된 데이터의 크기
"size_download" //다운로드된 데이터의 크기
"speed_download" //다운로드 속도
"speed_upload" //업로드 속도
"download_content_length" //다운로드 콘텐츠의 길이
"upload_content_length" //업로드된 콘텐츠의 길이
"starttransfer_time" //전송 시작 시간
"redirect_time" //리디렉션에 시간이 걸립니다. 브라우저 기반 리디렉션 첫 번째 예에서는 서버에 브라우저 기반 리디렉션이 있는지 여부를 감지하는 코드 조각을 제공합니다. 예를 들어, 일부 웹사이트는 모바일 브라우저인지, 사용자가 어느 국가에 거주하는지에 따라 웹페이지를 리디렉션합니다.
우리는 CURLOPT_HTTPHEADER 옵션을 사용하여 사용자 에이전트 정보 및 기본 언어를 포함하여 보내는 HTTP 요청 헤더(http 헤더)를 설정합니다. 그런 다음 이러한 특정 웹사이트가 우리를 다른 URL로 리디렉션하는지 살펴보겠습니다.
// 테스트용 URL
$urls = 배열(
" http://www.cnn.com ",
" http://www.mozilla.com ",
" http://www.facebook.com "
);
// 테스트용 브라우저 정보
$브라우저 = 배열(
"표준" => 배열(
"user_agent" => "Mozilla/5.0(Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6(.NET CLR 3.5.30729)",
"언어" => "en-us,en;q=0.5"
),
"iphone" => 배열(
"user_agent" => "Mozilla/5.0(iPhone; U; Mac OS X와 같은 CPU; en) AppleWebKit/420+(KHTML, like Gecko) 버전/3.0 Mobile/1A537a Safari/419.3",
"언어" => "en"
),
"프랑스어" => 배열(
"user_agent" => "Mozilla/4.0(호환; MSIE 7.0; Windows NT 5.1; GTB6; .NET CLR 2.0.50727)",
"언어" => "fr,fr-FR;q=0.5"
)
);
foreach($url을 $url로) {
echo "URL: $urln";
foreach ($test_name으로서의 $browser => $browser) {
$ch = 컬_초기화();
//URL 설정
컬_setopt($ch, CURLOPT_URL, $url);
//브라우저별 헤더 설정
컬_setopt($ch, CURLOPT_HTTPHEADER, 배열(
"사용자 에이전트: {$browser['user_agent']}",
"수락 언어: {$browser['언어']}"
)));
// 페이지 콘텐츠가 필요하지 않습니다.
컬_setopt($ch, CURLOPT_NOBODY, 1);
// HTTP 헤더만 반환
컬_setopt($ch, CURLOPT_HEADER, 1);
// 인쇄하는 대신 결과를 반환합니다.
컬_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = 컬_exec($ch);
컬_닫기($ch);
// 리디렉션을 위한 HTTP 헤더 정보가 있나요?
if (preg_match("!위치: (.*)!", $output, $matches)) {
echo "$test_name: $matches[1]n으로 리디렉션됩니다.";
} 또 다른 {
echo "$test_name: 리디렉션 없음n";
}
}
에코 "nn";
}먼저 테스트해야 할 URL 집합을 만든 다음 테스트해야 하는 브라우저 정보 집합을 지정합니다. 마지막으로 루프는 발생할 수 있는 다양한 URL 및 브라우저 일치 상황을 테스트하는 데 사용됩니다.
cURL 옵션을 지정했기 때문에 반환된 출력에는 HTTP 헤더 정보($output에 저장됨)만 포함됩니다. 간단한 일반 규칙을 사용하여 헤더 정보에 "Location:"이라는 단어가 포함되어 있는지 확인합니다.
이 코드를 실행하면 다음 결과가 반환됩니다.
POST 메서드를 사용하여 데이터 보내기 GET 요청을 할 때 "쿼리 문자열"을 통해 데이터를 URL로 전달할 수 있습니다. 예를 들어, Google에서 검색할 때 검색 키는 URL 쿼리 문자열의 일부입니다.
http://www.google.com/search?q=nettuts 이 경우 시뮬레이션을 위해 cURL이 필요하지 않을 수 있습니다. 이 URL을 "file_get_contents()"에 던지면 동일한 결과를 얻게 됩니다.
그러나 일부 HTML 양식은 POST 메서드를 사용하여 제출됩니다. 이 양식이 제출되면 쿼리 문자열 대신 HTTP 요청 본문(요청 본문)을 통해 데이터가 전송됩니다. 예를 들어, CodeIgniter 포럼 양식을 사용할 때 어떤 키워드를 입력하더라도 항상 다음 페이지에 게시됩니다.
http://codeigniter.com/forums/do_search/ PHP 스크립트를 사용하여 이 URL 요청을 시뮬레이션할 수 있습니다. 먼저 POST 데이터를 받아들이고 표시할 수 있는 새 파일을 만듭니다. 이름은 post_output.php입니다.
print_r($_POST); 다음으로 cURL 요청을 수행하는 PHP 스크립트를 작성합니다.
$url = " http://localhost/post_output.php ";
$post_data = 배열(
"foo" => "바",
"쿼리" => "넷투츠",
"작업" => "제출"
);
$ch = 컬_초기화();
컬_setopt($ch, CURLOPT_URL, $url);
컬_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// 데이터를 게시하고 있습니다!
컬_setopt($ch, CURLOPT_POST, 1);
//포스트 변수 추가
컬_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$output = 컬_exec($ch);
컬_닫기($ch);
echo $output;코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
이 스크립트는 페이지의 $_POST 변수인 post_output.php에 POST 요청을 보내고 이를 반환합니다. cURL을 사용하여 이 출력을 캡처합니다.
파일 업로드 파일 업로드는 이전 POST와 매우 유사합니다. 모든 파일 업로드 양식은 POST 방식으로 제출되기 때문입니다.
먼저, upload_output.php라는 파일을 수신할 새 페이지를 만듭니다:
print_r($_FILES);다음은 실제로 파일 업로드 작업을 수행하는 스크립트입니다.
$url = " http://localhost/upload_output.php ";
$post_data = 배열(
"foo" => "바",
//업로드할 로컬 파일 주소
"업로드" => "@C:/wamp/www/test.zip"
);
$ch = 컬_초기화();
컬_setopt($ch, CURLOPT_URL, $url);
컬_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
컬_setopt($ch, CURLOPT_POST, 1);
컬_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$output = 컬_exec($ch);
컬_닫기($ch);
echo $output; 파일을 업로드해야 하는 경우 post 변수처럼 파일 경로를 전달하되 앞에 @ 기호를 추가해야 합니다. 이 스크립트를 실행하면 다음과 같은 결과가 출력됩니다.
cURL 일괄 처리(다중 cURL)
cURL에는 일괄 처리라는 고급 기능도 있습니다. 이 기능을 사용하면 여러 URL 연결을 동시에 또는 비동기적으로 열 수 있습니다.
다음은 php.net의 샘플 코드입니다:
//두 개의 cURL 리소스 생성
$ch1 = 컬_초기화();
$ch2 = 컬_초기화();
//URL 및 적절한 매개변수 지정
cur_setopt($ch1, CURLOPT_URL, " http://lxr.php.net/ ");
컬_setopt($ch1, CURLOPT_HEADER, 0);
cur_setopt($ch2, CURLOPT_URL, " http://www.php.net/ ");
컬_setopt($ch2, CURLOPT_HEADER, 0);
//cURL 배치 핸들 생성
$mh = 컬_멀티_초기화();
//처음 두 개의 리소스 핸들을 추가합니다.
컬_멀티_추가_핸들($mh,$ch1);
컬_멀티_추가_핸들($mh,$ch2);
// 상태 변수를 미리 정의합니다.
$ 활성 = null;
//일괄처리 실행
하다 {
$mrc = 컬_멀티_exec($mh, $active);
} 동안($mrc == CURLM_CALL_MULTI_PERFORM);
while ($active && $mrc == CURLM_OK) {
if (curl_multi_select($mh) != -1) {
하다 {
$mrc = 컬_멀티_exec($mh, $active);
} 동안($mrc == CURLM_CALL_MULTI_PERFORM);
}
}
//각 핸들을 닫습니다.
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
cur_multi_close($mh); 여기서 해야 할 일은 여러 cURL 핸들을 열고 배치 핸들에 할당하는 것입니다. 그런 다음 완료될 때까지 잠시 루프를 기다리면 됩니다.
이 예에는 두 개의 주요 루프가 있습니다. 첫 번째 do-while 루프는curl_multi_exec()를 반복적으로 호출합니다. 이 기능은 비차단 기능이지만 가능한 한 적게 실행됩니다. 이 값이 상수 CURLM_CALL_MULTI_PERFORM과 동일하다면 아직 수행해야 할 긴급 작업이 있음을 의미합니다(예: URL에 해당하는 http 헤더 정보 전송). 즉, 반환 값이 변경될 때까지 이 함수를 계속 호출해야 합니다.
다음 while 루프는 $active 변수가 true인 경우에만 계속됩니다. 이 변수는 이전에 두 번째 매개변수로 curl_multi_exec()에 전달되었으며 배치 핸들에 여전히 활성 연결이 있는지 여부를 나타냅니다. 다음으로, 활성 연결(예: 서버 응답 수신)이 발생할 때까지 "차단"되는 curl_multi_select()를 호출합니다. 이 함수가 성공적으로 실행되면 또 다른 do-while 루프를 입력하고 다음 URL로 계속 진행합니다.
이 기능을 실제로 활용하는 방법을 살펴보겠습니다.
WordPress 연결 검사기 외부 웹사이트에 대한 링크가 많이 포함된 기사가 많은 블로그가 있다고 가정해 보세요. 잠시 후 이러한 링크 중 상당수가 어떤 이유로든 유효하지 않게 되었습니다. 조화를 이룬 것인지, 사이트 전체가 해킹된 것인지...
아래 스크립트를 만들어 이러한 모든 링크를 분석하고 열 수 없거나 404가 있는 웹사이트/웹페이지를 찾아 보고서를 생성해 보겠습니다.
다음은 실제로 작동하는 WordPress 플러그인이 아니며 단지 데모용으로만 독립적인 기능을 갖춘 스크립트일 뿐이라는 점에 유의하세요. 감사합니다.
좋아요, 시작해 보겠습니다. 먼저 데이터베이스에서 다음 링크를 모두 읽어보세요.
//구성
$db_host = '로컬호스트';
$db_user = '루트';
$db_pass = '';
$db_name = '워드프레스';
$excluded_domains = 배열(
'localhost', 'www.mydomain.com');
$max_connections = 10;
//일부 변수 초기화
$url_list = 배열();
$working_urls = 배열();
$dead_urls = 배열();
$not_found_urls = 배열();
$ 활성 = null;
// MySQL에 연결
if (!mysql_connect($db_host, $db_user, $db_pass)) {
die('연결할 수 없습니다: ' . mysql_error());
}
if (!mysql_select_db($db_name)) {
die('db를 선택할 수 없습니다: ' . mysql_error());
}
// 링크가 있는 모든 기사를 찾습니다.
$q = "wp_posts에서 post_content 선택
post_content가 '%href=%'와 같은 곳
AND post_status = '게시'
AND post_type = '게시물'";
$r = mysql_query($q) 또는 die(mysql_error());
while ($d = mysql_fetch_assoc($r)) {
// 일반 일치 링크 사용
if (preg_match_all("!href="(.*?)"!", $d['post_content'], $matches)) {
foreach ($matches[1]를 $url로) {
// 일부 도메인 제외
$tmp = pars_url($url);
if (in_array($tmp['host'], $excluded_domains)) {
계속하다;
}
// URL을 저장
$url_list []= $url;
}
}
}
// 중복 링크 제거
$url_list = array_values(array_unique($url_list));
if (!$url_list) {
die('확인할 URL이 없습니다.');
}먼저 데이터베이스, 제외할 일련의 도메인 이름($excluded_domains) 및 최대 동시 연결 수($max_connections)를 구성합니다. 그런 다음 데이터베이스에 연결하고 기사와 포함된 링크를 가져와서 배열($url_list)로 수집합니다.
아래 코드는 다소 복잡하므로 단계별로 자세히 설명하겠습니다.
// 1. 배치 프로세서
$mh = 컬_멀티_초기화();
// 2. 일괄처리가 필요한 URL을 추가합니다.
for ($i = 0; $i < $max_connections; $i++) {
add_url_to_multi_handle($mh, $url_list);
}
// 3. 초기 처리
하다 {
$mrc = 컬_멀티_exec($mh, $active);
} 동안($mrc == CURLM_CALL_MULTI_PERFORM);
// 4. 메인 루프
while ($active && $mrc == CURLM_OK) {
// 5. 활성 연결이 있습니다.
if (curl_multi_select($mh) != -1) {
// 6. 일
하다 {
$mrc = 컬_멀티_exec($mh, $active);
} 동안($mrc == CURLM_CALL_MULTI_PERFORM);
// 7. 정보가 있나요?
if ($mhinfo = 컬_멀티_정보_read($mh)) {
//연결이 정상적으로 종료되었음을 의미
// 8. 컬 핸들에서 정보 가져오기
$chinfo = cur_getinfo($mhinfo['handle']);
// 9. 데드링크?
if (!$chinfo['http_code']) {
$dead_urls []= $chinfo['url'];
// 10. 404?
} else if ($chinfo['http_code'] == 404) {
$not_found_urls []= $chinfo['url'];
// 11. 아직 사용 가능
} 또 다른 {
$working_urls []= $chinfo['url'];
}
// 12. 핸들 제거
cur_multi_remove_handle($mh, $mhinfo['handle']);
cur_close($mhinfo['handle']);
// 13. 새 URL을 추가하고 작업을 수행합니다.
if (add_url_to_multi_handle($mh, $url_list)) {
하다 {
$mrc = 컬_멀티_exec($mh, $active);
} 동안($mrc == CURLM_CALL_MULTI_PERFORM);
}
}
}
}
// 14. 완료
컬_다중_닫기($mh);
echo "==죽은 URL==n";
echo implode("n",$dead_urls) "nn";
echo "==404개의 URL==n";
echo implode("n",$not_found_urls) "nn";
echo "==작업 URL==n";
echo implode("n",$working_urls);
// 15. 배치 프로세서에 URL 추가
함수 add_url_to_multi_handle($mh, $url_list) {
정적 $index = 0;
// URL이 남아 있으면 쓸모가 없습니다.
if ($url_list[$index]) {
//새 컬 핸들 생성
$ch = 컬_초기화();
//URL 구성
컬_setopt($ch, CURLOPT_URL, $url_list[$index]);
// 반환된 내용을 출력하고 싶지 않습니다.
컬_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// 리디렉션이 우리를 데려가는 곳이면 어디든 갈 것입니다.
컬_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
// 콘텐츠 본문이 필요하지 않으므로 대역폭과 시간을 절약할 수 있습니다.
컬_setopt($ch, CURLOPT_NOBODY, 1);
//배치 프로세서에 추가
컬_멀티_추가_핸들($mh, $ch);
// 카운터에 전화를 걸면 다음에 이 함수를 호출할 때 다음 URL을 추가할 수 있습니다.
$인덱스++;
사실을 반환;
} 또 다른 {
// 새로운 URL을 처리할 필요가 없습니다.
거짓을 반환;
}
}위 코드는 아래에 설명되어 있습니다. 목록의 일련 번호는 코드 주석의 일련 번호에 해당합니다.
새 배치 프로세서를 만듭니다. 멀티 핸들을 만들었습니다.
나중에 일괄 처리기에 URL을 추가하는 add_url_to_multi_handle() 함수를 만듭니다. 이 함수가 호출될 때마다 새 URL이 배치 프로세서에 추가됩니다. 처음에는 배치 프로세서에 10개의 URL을 추가합니다(이 숫자는 $max_connections에 의해 결정됨).
CURLM_CALL_MULTI_PERFORM을 반환하는 한 아직 수행할 작업이 남아 있는 한, 초기화 작업을 수행하려면 cur_multi_exec()를 실행해야 합니다. 이는 주로 연결을 생성하기 위해 수행되며 전체 URL 응답을 기다리지 않습니다.
배치에 활성 연결이 있는 한 메인 루프는 계속됩니다.
curl_multi_select()는 URL 쿼리 결과가 활성 연결이 될 때까지 기다립니다.
cURL의 작업은 주로 응답 데이터를 얻기 위한 것입니다.
다양한 정보를 확인해보세요. URL 요청이 완료되면 배열이 반환됩니다.
반환된 배열에 cURL 핸들이 있습니다. 우리는 이를 사용하여 단일 cURL 요청에 대한 해당 정보를 얻습니다.
데드 링크이거나 요청 시간이 초과되면 http 상태 코드가 반환되지 않습니다.
이 페이지를 찾을 수 없으면 404 상태 코드가 반환됩니다.
다른 경우에는 이 링크를 사용할 수 있다고 가정합니다(물론 500 오류 등도 확인할 수 있습니다...).
이 cURL 핸들은 더 이상 사용되지 않으므로 배치에서 제거하고 닫으십시오!
좋습니다. 이제 다른 URL을 추가할 수 있습니다. 다시 한번 초기화 작업이 시작됩니다...
자, 해야 할 일은 모두 끝났습니다. 배치 프로세서를 닫고 보고서를 생성합니다.
배치 프로세서에 새 URL을 추가하는 함수로 돌아가 보겠습니다. 이 함수가 호출될 때마다 정적 변수 $index가 증가하여 처리할 URL이 몇 개 남았는지 알 수 있습니다.
내 블로그에서 이 스크립트를 실행했는데(테스트 필요, 일부 잘못된 링크가 의도적으로 추가됨) 결과는 다음과 같습니다.
총 40개 정도의 URL을 확인했는데 2초도 채 걸리지 않았습니다. 더 많은 수의 URL을 확인해야 할 때 걱정이 줄어드는 효과를 상상할 수 있습니다! 동시에 10개의 연결을 열면 10배 더 빨라집니다! 또한 cURL 일괄 처리의 비차단 기능을 활용하여 웹 스크립트를 차단하지 않고 많은 수의 URL 요청을 처리할 수도 있습니다.
기타 유용한 cURL 옵션
HTTP 인증 URL 요청에 HTTP 기반 인증이 필요한 경우 다음 코드를 사용할 수 있습니다.
$url = " http://www.somesite.com/members/ ";
$ch = 컬_초기화();
컬_setopt($ch, CURLOPT_URL, $url);
컬_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//사용자 이름과 비밀번호 보내기
컬_setopt($ch, CURLOPT_USERPWD, "내 사용자 이름:내 비밀번호");
// 리디렉션을 허용할 수 있습니다.
컬_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
// 다음 옵션을 사용하면 cURL이
// 사용자 이름과 비밀번호를 보낼 수도 있습니다.
컬_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1);
$output = 컬_exec($ch);
컬_닫기($ch);FTP 업로드
PHP는 자체 FTP 라이브러리와 함께 제공되지만 cURL을 사용할 수도 있습니다.
//파일 포인터 열기
$file = fopen("/경로/to/파일", "r");
// URL에는 필요한 정보가 대부분 포함되어 있습니다.
$url = " ftp://사용자 이름:[email protected]:21/path/to/new/file ";
$ch = 컬_초기화();
컬_setopt($ch, CURLOPT_URL, $url);
컬_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//관련 옵션 업로드
컬_setopt($ch, CURLOPT_UPLOAD, 1);
컬_setopt($ch, CURLOPT_INFILE, $fp);
컬_setopt($ch, CURLOPT_INFILESIZE, 파일 크기("/경로/to/파일"));
// ASCII 모드 활성화 여부(텍스트 파일 업로드 시 유용)
컬_setopt($ch, CURLOPT_FTPASCII, 1);
$output = 컬_exec($ch);
컬_close($ch); 벽을 우회하려면 프록시를 사용하여 cURL 요청을 시작할 수 있습니다.
$ch = 컬_초기화();
컬_setopt($ch, CURLOPT_URL,'http://www.example.com');
컬_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//프록시 주소 지정
컬_setopt($ch, CURLOPT_PROXY, '11.11.11.11:8080');
// 필요한 경우 사용자 이름과 비밀번호를 입력하세요.
컬_setopt($ch, CURLOPT_PROXYUSERPWD,'사용자:패스');
$output = 컬_exec($ch);
컬백 함수를 사용하면 cURL이 URL 요청 중에 지정된 콜백 함수를 호출할 수 있습니다. 예를 들어, 콘텐츠나 응답이 완전히 다운로드될 때까지 기다리기보다는 콘텐츠나 응답이 다운로드되는 즉시 데이터 활용을 시작하세요.
$ch = 컬_초기화();
cur_setopt($ch, CURLOPT_URL,'http://net.tutsplus.com');
컬_setopt($ch, CURLOPT_WRITEFUNCTION,"진행_기능");
컬_exec($ch);
컬_닫기($ch);
함수 Progress_function($ch,$str) {
에코 $str;
return strlen($str);
}이 콜백 함수는 문자열의 길이를 반환해야 합니다. 그렇지 않으면 이 함수가 제대로 작동하지 않습니다.
URL 응답 수신 과정에서 데이터 패킷이 수신되는 한 이 함수가 호출됩니다.
요약 오늘 우리는 cURL 라이브러리의 강력한 기능과 유연한 확장성에 대해 배웠습니다. 당신이 그것을 좋아하길 바랍니다. 다음에 URL 요청을 하고 싶다면 cURL을 고려해 보세요!
감사해요!
원본 텍스트: PHP 기반 cURL로 빠른 시작
영어 원문: http://net.tutsplus.com/tutorials/php/techniques-and-resources-for-mastering-curl/
원작자: 부락 구젤
재인쇄를 위해서는 출처를 남겨두셔야 합니다.