LEN

PHP中数据传输神器 CURL
看视频做的学习笔记: 代码来源于 慕课网 cURL课程源代码1. 简单的爬虫<?php # 抓取百度网页数据...
扫描右侧二维码阅读全文
07
2017/01

PHP中数据传输神器 CURL

看视频做的学习笔记: 代码来源于 慕课网 cURL课程源代码

1. 简单的爬虫

<?php
# 抓取百度网页数据 直接输出
$curl=curl_init('http://www.baidu.com');                           //初始化
curl_exec($curl);                                                  //执行
curl_close($curl);                                                 //关闭cURL

2. 抓取数据后台替换内容

<?php
/
 * 慕课网视频教学
 * 代码实例-PHP-cURL实战
 * 实例描述:在网络上下载一个网页并把内容中的“百度”替换为“屌丝”之后输出
 */
$curlobj = curl_init();                                            // 初始化
curl_setopt($curlobj, CURLOPT_URL, "http://www.baidu.com");        // 设置访问网页的URL
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, true);               // 执行之后不直接打印出来
$output=curl_exec($curlobj);                                       // 执行
curl_close($curlobj);                                              // 关闭cURL
echo str_replace("百度","屌丝",$output);                            // 替换内容

3. 模拟登陆 并抓取数据

<?php
/
 * 慕课网视频教学
 * 代码实例-PHP-cURL实战
 * 实例描述:登录慕课网并下载个人空间页面
 */
$data=array(
    'username' => 'promonkey', 
    'password' => '1q2w3e',
    'remember'=>1
);
$data='username=zjzhoufy@126.com&password=1q2w3e&remember=1';
$curlobj = curl_init();            // 初始化
curl_setopt($curlobj, CURLOPT_URL, "http://www.imooc.com/user/login");        // 设置访问网页的URL
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, true);                          // 执行之后不直接打印出来

// Cookie相关设置,这部分设置需要在所有会话开始之前设置
date_default_timezone_set('PRC');                                             // 使用Cookie时,必须先设置时区
curl_setopt($curlobj, CURLOPT_COOKIESESSION, TRUE);                           // 让客户端支持cookie/session
curl_setopt($curlobj, CURLOPT_COOKIEFILE, "cookiefile");                      // 设置cookie 保存的地址
curl_setopt($curlobj, CURLOPT_COOKIEJAR, "cookiefile");                       // 连接时从cookiefile 中提取cookie 使用
curl_setopt($curlobj, CURLOPT_COOKIE, session_name() . '=' . session_id() );  // 在HTTP request header中设置Cookie header

curl_setopt($curlobj, CURLOPT_HEADER, 0);                                     // 不要打印头信息
curl_setopt($curlobj, CURLOPT_FOLLOWLOCATION, 1);                             // 这样能够让cURL支持页面链接跳转

//POST 请求
curl_setopt($curlobj, CURLOPT_POST, 1);                                       // 开启post 请求
curl_setopt($curlobj, CURLOPT_POSTFIELDS, $data);                             // 加入post参数
curl_setopt($curlobj, CURLOPT_HTTPHEADER, array(                              // 添加http 头信息
    "application/x-www-form-urlencoded; charset=utf-8",                       // 模拟表单编码,在发送前编码所有字符
    "Content-length: ".strlen($data)                                          // 传输字节长度
)); 
curl_exec($curlobj);                                                          // 执行 (已经登录完成)

// 登陆完成后操作
curl_setopt($curlobj, CURLOPT_URL, "http://www.imooc.com/space/index");       // 打开个人中心
curl_setopt($curlobj, CURLOPT_POST, 0);                                       // 重新设置请求方式
curl_setopt($curlobj, CURLOPT_HTTPHEADER, array(                              // 重新设置头信息 get方式获取个人中心内容
    "Content-type: text/xml"
)); 
$output=curl_exec($curlobj);                                                  // 执行
curl_close($curlobj);                                                         // 关闭cURL
echo $output;                                                                 // 输出

date_default_timezone_set('PRC'); // 使用Cookie时,必须先设置时区

为什么必须先设置时区呢,原因是cookie 是有过期时间的,所以必须设置timezone ,将时间设置为同一起跑线!


4. FTP 下载文件到本地

<?php
/**
 * 慕课网视频教学
 * 代码实例-PHP-cURL实战
 * 实例描述:从FTP服务器下载一个文件到本地
 */
$curlobj = curl_init();    
curl_setopt($curlobj, CURLOPT_URL, "ftp://192.168.1.100/downloaddemo.txt");      // 下载文件地址
curl_setopt($curlobj, CURLOPT_HEADER, 0);                                        // 不打印出头信息
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1);                                // 执行之后不直接打印出来
curl_setopt($curlobj, CURLOPT_TIMEOUT, 300);                                     // 防止下载超时
curl_setopt($curlobj, CURLOPT_USERPWD, "peter.zhou:123456");                     // FTP用户名:密码

// 设置 输出 文件
$outfile = fopen('dest.txt', 'wb');                                              // 已写方式打开一个文件
curl_setopt($curlobj, CURLOPT_FILE, $outfile);                                   // 将刚才打开文件的资源数据参数形式上传

$rtn = curl_exec($curlobj);                                                      // 执行成功 写入到 dest.txt中相当于下载 
fclose($outfile);                                                                // 关闭文件
if(!curl_errno($curlobj)){
    // $info = curl_getinfo($curlobj); 
    // print_r($info);
    echo "RETURN: " . $rtn;  
} else {
  echo 'Curl error: ' . curl_error($curlobj);
}
curl_close($curlobj);

5. 上传文件到 FTP服务器

<?php
/**
 * 慕课网视频教学
 * 代码实例-PHP-cURL实战
 * 实例描述:把本地文件上传到FTP服务器上
 */
$curlobj = curl_init();    
$localfile = 'ftp01.php';
$fp = fopen($localfile, 'r');

curl_setopt($curlobj, CURLOPT_URL, "ftp://192.168.1.100/ftp01_uploaded.php");        // 上传后的文件名
curl_setopt($curlobj, CURLOPT_HEADER, 0); 
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1);  
curl_setopt($curlobj, CURLOPT_TIMEOUT, 300); // times out after 300s
curl_setopt($curlobj, CURLOPT_USERPWD, "peter.zhou:123456");

//上传需要
curl_setopt($curlobj, CURLOPT_UPLOAD, 1);                                             // 告知服务器是往上传的操作
curl_setopt($curlobj, CURLOPT_INFILE, $fp);                                           // 传递文件资源地址
curl_setopt($curlobj, CURLOPT_INFILESIZE, filesize($localfile));                      // 告知上传文件大小
$rtn = curl_exec($curlobj);  
fclose($fp); 
if(!curl_errno($curlobj)){
    echo "Uploaded successfully.";  
} else {
  echo 'Curl error: ' . curl_error($curlobj);
}
curl_close($curlobj);

6. 下载HTTPS的资源

<?php
/**
 * 慕课网视频教学
 * 代码实例-PHP-cURL实战
 * 实例描述:下载网络上面的一个HTTPS的资源
 */
$curlobj = curl_init();                                         // 初始化
curl_setopt($curlobj, CURLOPT_URL, "https://www.baidu.com");    // 设置访问网页的URL
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, true);            // 执行之后不直接打印出来

// 设置HTTPS支持
date_default_timezone_set('PRC');                               // 使用HTTPS时,必须先设置时区 证书验证也是需要时间一致
curl_setopt($curlobj, CURLOPT_SSL_VERIFYPEER, 0);               // 是否检测服务器的证书是否由正规浏览器认证过的授权CA颁发的
curl_setopt($curlobj, CURLOPT_SSL_VERIFYHOST, 2);               // 是否检测服务器的域名与证书上的是否一致

$output=curl_exec($curlobj);                                    // 执行
curl_close($curlobj);                                           // 关闭cURL
echo $output;

整理代码均来自 慕课网 PHP中的数据传输神器cURL

最后修改:2017 年 02 月 08 日 01 : 43 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论