0
在线手册:中文 英文

GET应用

<?php
   
//初始化
  $ch curl_init();

  //设置选项,包括URL
  curl_setopt($chCURLOPT_URL"http://www.qq.com");
  curl_setopt($chCURLOPT_RETURNTRANSFER1);
  curl_setopt($chCURLOPT_HEADER0);

  //执行并获取HTML文档内容
  $output curl_exec($ch);

  //释放curl句柄
  curl_close($ch);

  //打印获得的数据
  print_r($output);

POST应用

<?php
   $url 
"http://localhost/web_services.php";
  $post_data = array ("username" => "bob","key" => "12345");

  $ch curl_init();

  curl_setopt($chCURLOPT_URL$url);
  curl_setopt($chCURLOPT_RETURNTRANSFER1);
  // post数据
  curl_setopt($chCURLOPT_POST1);
  // post的变量
  curl_setopt($chCURLOPT_POSTFIELDS$post_data);

  $output curl_exec($ch);
  curl_close($ch);

  //打印获得的数据
  print_r($output);

访问https示例

<?php
   
/** 
 * curl POST 
 * 
 * @param   string  url 
 * @param   array   数据 
 * @param   int     请求超时时间 
 * @param   bool    HTTPS时是否进行严格认证 
 * @return  string 
 */  
function curlPost($url$data = array(), $timeout 30$CA true){    

    
$cacert getcwd() . '/cacert.pem'//CA根证书  
    
$SSL substr($url08) == "https://" true false;  

    
$ch curl_init();  
    
curl_setopt($chCURLOPT_URL$url);  
    
curl_setopt($chCURLOPT_TIMEOUT$timeout);  
    
curl_setopt($chCURLOPT_CONNECTTIMEOUT$timeout-2);  
    if (
$SSL && $CA) {  
        
curl_setopt($chCURLOPT_SSL_VERIFYPEERtrue);   // 只信任CA颁布的证书  
        
curl_setopt($chCURLOPT_CAINFO$cacert); // CA根证书(用来验证的网站证书是否是CA颁布) 
        
curl_setopt($chCURLOPT_SSL_VERIFYHOST2); // 检查证书中是否设置域名,并且是否与提供的主机名匹配  
    
} else if ($SSL && !$CA) {  
        
curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse); // 信任任何证书  
        
curl_setopt($chCURLOPT_SSL_VERIFYHOST1); // 检查证书中是否设置域名  
    
}  
    
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);  
    
curl_setopt($chCURLOPT_HTTPHEADER, array('Expect:')); //避免data数据过长问题  
    
curl_setopt($chCURLOPT_POSTtrue);  
    
curl_setopt($chCURLOPT_POSTFIELDS$data);  
    
//curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); //data with URLEncode  

    
$ret curl_exec($ch);  
    
//var_dump(curl_error($ch));  //查看报错信息  

    
curl_close($ch);  
    return 
$ret;    
}    

上传文件示例

<?php
/*
  $strUrl: 上传目标url,
  $strSrcFilePath:文件的路径, 绝对地址.
  $arrPostParam:顺便的一些参数值.post方式
  $arrCookie:cookie值
  $strReferer:来路设置
*/
function uploadFile($strUrl$strSrcFilePath$arrPostParam$arrCookie=array(), $strReferer=''){
    
$arrParam = array(
        
'object_file' => '@'.$strSrcFilePath,
    );
    
$arrParam array_merge($arrPostParam$arrParam);
    
$ch curl_init($strUrl);
    
curl_setopt($chCURLOPT_HEADER0);
    
curl_setopt($chCURLOPT_TIMEOUT5);
    
curl_setopt($chCURLOPT_CONNECTTIMEOUT5);
    
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
    
curl_setopt($chCURLOPT_POSTtrue);
    
curl_setopt($chCURLOPT_POSTFIELDS$arrParam);
    
curl_setopt($chCURLOPT_REFERER$strReferer);
    
curl_setopt($chCURLOPT_FOLLOWLOCATIONtrue);
    
curl_setopt($chCURLOPT_MAXREDIRS3);
    
curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
    
curl_setopt($chCURLOPT_SSL_VERIFYHOST0);
    if (
$arrCookie && is_array($arrCookie)) {
        
$cookie_str '';
        foreach(
$arrCookie as $key => $value) {
            
$cookie_str .= "$key=$value; ";
        }
        
curl_setopt($chCURLOPT_COOKIE$cookie_str);
    }
    
$response curl_exec($ch);
    if (
curl_errno($ch) != 0) {
        return array(
'errno'=>1'errmsg'=>"upload $strSrcFilePath failed: ".curl_error($ch), 'data'=>'');
    }
    
curl_close($ch);
    if (!
$response) {
        return array(
'errno'=>1'errmsg'=>"upload $strSrcFilePath failed: response is empty"'data'=>'');
    }
    return array(
'errno'=>1'errmsg'=>'ok''data'=>$response);
}

并发请求示例

<?php
function rolling_curl($urls$delay) { 
$queue curl_multi_init(); 
$map = array(); 

foreach (
$urls as $url) { 
$ch curl_init(); 

curl_setopt($chCURLOPT_URL$url); 
curl_setopt($chCURLOPT_TIMEOUT1); 
curl_setopt($chCURLOPT_RETURNTRANSFER1); 
curl_setopt($chCURLOPT_HEADER0); 
curl_setopt($chCURLOPT_NOSIGNALtrue); 

curl_multi_add_handle($queue$ch); 
$map[(string) $ch] = $url


$responses = array(); 
do { 
while ((
$code curl_multi_exec($queue$active)) == CURLM_CALL_MULTI_PERFORM) ; 

if (
$code != CURLM_OK) { break; } 

// a request was just completed -- find out which one 
while ($done curl_multi_info_read($queue)) { 

// get the info and content returned on the request 
$info curl_getinfo($done['handle']); 
$error curl_error($done['handle']); 
$results callback(curl_multi_getcontent($done['handle']), $delay); 
$responses[$map[(string) $done['handle']]] = compact('info''error''results'); 

// remove the curl handle that just completed 
curl_multi_remove_handle($queue$done['handle']); 
curl_close($done['handle']); 


// Block for data in / output; error handling is done by curl_multi_exec 
if ($active 0) { 
curl_multi_select($queue0.5); 


} while (
$active); 

curl_multi_close($queue); 
return 
$responses
0
在线手册:中文 英文