PHP curl函数使用详解 http

使用PHP的cURL库可以简单和有效地去抓网页。你只需要运行一个脚本,然后分析一下你所抓取的网页,然后就可以以程序的方式得到你想要的数据了。无论是你想从从一个链接上取部分数据,或是取一个XML文件并把其导入数据库,那怕就是简单的获取网页内容,cURL 是一个功能强大的PHP库。

PHP中的CURL函数库(Client URL Library Function)

curl_close — 关闭一个curl会话
curl_copy_handle — 拷贝一个curl连接资源的所有内容和参数
curl_errno — 返回一个包含当前会话错误信息的数字编号
curl_error — 返回一个包含当前会话错误信息的字符串
curl_exec — 执行一个curl会话
curl_getinfo — 获取一个curl连接资源句柄的信息
curl_init — 初始化一个curl会话
curl_multi_add_handle — 向curl批处理会话中添加单独的curl句柄资源
curl_multi_close — 关闭一个批处理句柄资源
curl_multi_exec — 解析一个curl批处理句柄
curl_multi_getcontent — 返回获取的输出的文本流
curl_multi_info_read — 获取当前解析的curl的相关传输信息
curl_multi_init — 初始化一个curl批处理句柄资源
curl_multi_remove_handle — 移除curl批处理句柄资源中的某个句柄资源
curl_multi_select — Get all the sockets associated with the cURL extension, which can then be "selected"
curl_setopt_array — 以数组的形式为一个curl设置会话参数
curl_setopt — 为一个curl设置会话参数
curl_version — 获取curl相关的版本信息

curl_init()函数的作用初始化一个curl会话,curl_init()函数唯一的一个参数是可选的,表示一个url地址。
curl_exec()函数的作用是执行一个curl会话,唯一的参数是curl_init()函数返回的句柄。
curl_close()函数的作用是关闭一个curl会话,唯一的参数是curl_init()函数返回的句柄。

本人常用来与接口对接方法:

function getApiData($api_url, $data=null, $headers = array()) {
 $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, $api_url);
 curl_setopt($ch, CURLOPT_HEADER, false);
 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
 if (!empty($headers)){

     curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

}
  if (!empty($data)){
       curl_setopt($ch, CURLOPT_POST,1);
       curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
 }

//1把结果存到字符串中,0直接显示
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 // 定义超时,以秒为单位
 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
 $out = curl_exec($ch);
 $out = trim($out);
 curl_close($ch);
 $out = json_decode($out, true);
 return $out;
}


例子一: 基本例子
基本例子

﹤?php
// 初始化一个 cURL 对象
$curl = curl_init();

// 设置你需要抓取的URL
curl_setopt($curl, CURLOPT_URL, 'http://www.cmx8.cn');

// 设置header
curl_setopt($curl, CURLOPT_HEADER, 1);

// 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

// 运行cURL,请求网页
$data = curl_exec($curl);

// 关闭URL请求
curl_close($curl);

// 显示获得的数据
var_dump($data);

?>


例子二: POST数据

sendSMS.php,其可以接受两个表单域,一个是电话号码,一个是短信内容。
POST数据

﹤?php
$phoneNumber = '13812345678';
$message = 'This message was generated by curl and php';
$curlPost = 'pNUMBER=' . urlencode($phoneNumber) . '&MESSAGE=' . urlencode($message) . '&SUBMIT=Send';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.lxvoip.com/sendSMS.php');
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
$data = curl_exec();
curl_close($ch);
?﹥


例子三:使用代理服务器
使用代理服务器

﹤?php 
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.cmx8.cn');
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
curl_setopt($ch, CURLOPT_PROXY, 'proxy.lxvoip.com:1080');
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'user:password');
$data = curl_exec();
curl_close($ch);
?﹥


例子四: 模拟登录

Curl 模拟登录 discuz 程序,适合DZ7.0,将username改成你的用户名,userpass改成你的密码就可以了.
Curl 模拟登录 discuz 程序

<?php 


!extension_loaded('curl') && die('The curl extension is not loaded.'); 

$discuz_url = 'http://www.lxvoip.com';//论坛地址 
$login_url = $discuz_url .'/logging.php?action=login';//登录页地址 
$get_url = $discuz_url .'/my.php?item=threads'; //我的帖子 

$post_fields = array(); 
//以下两项不需要修改 
$post_fields['loginfield'] = 'username'; 
$post_fields['loginsubmit'] = 'true'; 
//用户名和密码,必须填写 
$post_fields['username'] = 'lxvoip'; 
$post_fields['password'] = '88888888'; 
//安全提问 
$post_fields['questionid'] = 0; 
$post_fields['answer'] = ''; 
//@todo验证码 
$post_fields['seccodeverify'] = ''; 

//获取表单FORMHASH 
$ch = curl_init($login_url); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$contents = curl_exec($ch); 
curl_close($ch); 
preg_match('/<input\s*type="hidden"\s*name="formhash"\s*value="(.*?)"\s*\/>/i', $contents, $matches); 
if(!empty($matches)) { 
$formhash = $matches[1]; 
} else { 
die('Not found the forumhash.'); 
} 

//POST数据,获取COOKIE 
$cookie_file = dirname(__FILE__) . '/cookie.txt'; 
//$cookie_file = tempnam('/tmp'); 
$ch = curl_init($login_url); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); 
curl_exec($ch); 
curl_close($ch); 

//带着上面得到的COOKIE获取需要登录后才能查看的页面内容 
$ch = curl_init($get_url); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); 
$contents = curl_exec($ch); 
curl_close($ch); 

var_dump($contents);

上传post文件 
接收文件 相当于服务端
<?php
if(isset($_REQUEST["test"])){
    echo  $_REQUEST["test"]."<br>";
}
$filetype = $_FILES["file"]["type"];
$filesize = $_FILES["file"]["size"];
echo $filetype."<BR>";
echo $filesize."<br>";
// if ((($filetype == "image/gif") || ($filetype == "image/jpeg") || ($filetype == "image/pjpeg")) && ($filesize < 15162960)) {
    if ($_FILES["file"]["error"] > 0) {
        echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
    } else {
        echo "Upload: " . $_FILES["file"]["name"] . "<br />";
        echo "Type: " . $filetype . "<br />";
        echo "Size: " . ($filesize / 1024) . " Kb<br />";
        echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
        
        if (file_exists("d:\\" . $_FILES["file"]["name"])) {
            echo $_FILES["file"]["name"] . " already exists. "."<Br>";
        } else {
            move_uploaded_file($_FILES["file"]["tmp_name"], "d:\\" . $_FILES["file"]["name"]);
            echo "Stored in: " . "d:\\" . $_FILES["file"]["name"];
        }
    }
// } else {
//     echo "Invalid file";
// }
?>

客户端代码发送
<?php
function getApiData($api_url, $data = null, $headers = array())
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $api_url);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
    if (! empty($headers)) {
        
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    }
    if (! empty($data)) {
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    }
    
    // true把结果存到字符串中,false直接显示
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    // 定义超时,以秒为单位
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
    $out = curl_exec($ch);
    $out = trim($out);
    curl_close($ch);
    // json处理
    // $out = json_decode($out, true);
    return $out;
}
$post = array(
    "test" => "fdfdsfsdf",
    "file" => "@server.php" // 这里是要上传的文件,key与后台处理文件对应
);
echo getApiData("http://localhost/test/http/upload.php", $post);

?>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值