CURL은 HTTP, FTP, TELNET 등을 포함한 다양한 프로토콜을 지원하는 매우 강력한 오픈 소스 라이브러리입니다. 우리는 이를 사용하여 HTTP 요청을 보냅니다. 이것이 제공하는 이점은 유연한 옵션을 통해 다양한 HTTP 프로토콜 매개변수를 설정할 수 있고 HTTPS를 지원한다는 것입니다. CURL은 URL 접두사가 "HTTP"인지 "HTTPS"인지에 따라 전송된 콘텐츠를 암호화할지 여부를 자동으로 선택할 수 있습니다.
CURL을 사용하여 요청을 보내는 기본 프로세스
CURL의 PHP 확장을 사용하여 HTTP 요청 보내기를 완료하는 단계는 일반적으로 다음과 같습니다.
연결 핸들을 초기화합니다.
CURL 옵션을 실행하고 결과를 가져옵니다. ;
VURL 연결 핸들을 해제합니다.
다음 프로그램 조각은 CURL을 사용하여 HTTP를 보내는 일반적인 프로세스입니다.
// 1. 初始化 $ch = curl_init(); // 2. 设置选项,包括URL curl_setopt($ch,CURLOPT_URL,"http://www.devdo.net"); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_HEADER,0); // 3. 执行并获取HTML文档内容 $output = curl_exec($ch); if($output === FALSE ){ echo "CURL Error:".curl_error($ch); } // 4. 释放curl句柄 curl_close($ch);
위 코드에서 네 가지 함수가 사용됩니다.
에 만족함을 나타냅니다. 등호는 출력이 FALSE인지 여부를 결정하는 데 사용됩니다. 이는 빈 문자열 반환과 오류를 구별하기 위한 것입니다.
2. CURLOPT_RETURNTRANSFER는 나중에 실행되는 컬_exec 함수의 반환이 URL의 반환 문자열임을 나타내기 위해 1로 설정됩니다. , URL의 반환 문자열이 아닙니다. 반환 문자열을 표준 출력으로 지정하고 TRUE를 반환합니다.
CURLLOPT_HEADER 0으로 설정하면 HTTP 헤더 정보가 반환되지 않음을 의미합니다.
CURL에는 다양한 옵션이 있습니다. PHP 공식 웹사이트(http://www.php.net/manual/en/function.curl-setopt.php)로 이동하면 CURL에서 지원하는 모든 옵션 목록을 볼 수 있습니다.
CURL 요청의 출력 정보 가져오기
curl_exec() 함수가 실행된 후, 컬_getinfo() 함수를 사용하여 CURL 요청의 관련 정보 출력을 얻을 수 있습니다. 샘플 코드는 다음과 같습니다.
curl_exec($ch); $info = curl_getinfo($sh); echo ' 获取 '.$info['url'].'耗时'.$info['total_time'].'秒';
위 코드에서 컬_getinfo는 다음 데이터를 포함하는 연관 배열을 반환합니다.
curl_getinfo()函数还有一个可选择参数$opt,通过这个参数可以设置一些常量,对应到上术这个字段,如果设置了第二个参数,那么返回的只有指定的信息。例如设置$opt为CURLINFO_TOTAL_TIME,则curl_getinfo()函数只返回total_time,即总传输消耗的时间,在只需要关注某些传输信息时,设置$opt参数很有意义。
使用CURL发送GET请求
如何使用CURL来发送GET请求,发送GET请求的关键是拼装格式正确的URL。请求地址和GET数据由一个“?”分割,然后GET变量的名称和值用“=”分隔,各个GET名称和值由“&”连接。PHP为我们提供了一个函数专门用来拼装GET请求和数据部分——http_build_query,该函数接受一个关联数组,返回由该关联数据描述的GET请求字符串。使用这个函数,结合CURL发送HTTP请求的一般流程,我们封闭了一个发送GET请求的函数——doCurlGetRequest,具体代码如下:
** *@desc 封闭curl的调用接口,get的请求方式。 */ function doCurlGetRequest($url,$data,$timeout = 5){ if($curl == "" || $timeout <= 0){ return false; } $url = $url.'?'.http_bulid_query($data); $con = curl_init((string)$url); curl_setopt($con, CURLOPT_HEADER, false); curl_setopt($con, CURLOPT_RETURNTRANSFER,true); curl_setopt($con, CURLOPT_TIMEOUT, (int)$timeout); return curl_exec($con); }
这个函数把使用http_build_query 拼装好的带GET参数的URL传给curl_init函数,然后使用CURL发送HTTP请求。
使用CURL发送POST请求
可以使用CURL提供的选项CURLOPT_POSTFIELDS,设置该选项为POST字符串数据就可以把请求放在正文中。同样我们实现了一个发送POST请求的函数——doCurlPostRequest,代码如下:
/** ** @desc 封装 curl 的调用接口,post的请求方式 **/ function doCurlPostRequest($url,$requestString,$timeout = 5){ if($url == '' || $requestString == '' || $timeout <=0){ return false; } $con = curl_init((string)$url); curl_setopt($con, CURLOPT_HEADER, false); curl_setopt($con, CURLOPT_POSTFIELDS, $requestString); curl_setopt($con, CURLOPT_POST,true); curl_setopt($con, CURLOPT_RETURNTRANSFER,true); curl_setopt($con, CURLOPT_TIMEOUT,(int)$timeout); return curl_exec($con); }
上面代码中除了设置CURLOPT_POSTFIELDS外,我们还设置了CURL_POST为true,标识这个请求是一个POST请求。在POST请求中也是可以传输GET数据的,只需要在URL中拼装GET请求数据即可秀。
相关文件:
本文主要和大家介绍了php curl上传、下载、https登陆实现代码,需要的朋友可以参考下......
本文主要为大家详细介绍了功能强大的PHP POST提交数据类,代码简洁且具有一定的参......
很多时候我们需要批量抓取一些网站的资源,这个时候就需要用到爬虫......
위 내용은 PHP에서 CURL을 사용하는 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!