概念
cURL:(Client URL Library Functions)由Daniel Stenberg创建 官方定义: curl is a command line tool for transferring data with URL syntax 即:百度翻译---用URL语法传输数据的命令行工具
cURL使用场景
其他资源... 所有网络上的资源都可以用cURL访问和下载到 FTP服务器里面的文件资源
WebService数据接口资源(查询天气|号码归属地...)
网页资源(新闻|购物...)
在PHP中使用cURL
若是环境中没有开启cURL支持 需要添加cURL支持
Windows: https://blog.csdn.net/u014149394/article/details/74332870 Linux:http://blog.163.com/sweet_hard/blog/static/666568382011112291327332 百度关键词
PHP windows curl PHP linux curl
在PHP中使用cURL
步骤分析
初始化 cURL curl_init() 客户端向服务器发送请求 接收响应 curl_exec() 关闭cURL curl_close()
用cURL制作一个简单的网页爬虫
初始化|请求(响应)|关闭
用cURL抓取网页信息并替换部分内容
初始化 curl_init() 设置访问页面的URL
curl_setopt($curl, CURLOPT_URL, "http://www.baidu.com") ;
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true) ;
执行会话 $curl_output = curl_exec($curl) ;
关闭 curl_close($curl) ; 字串替换 echo str_replace("百度", "HAPPY", $curl_output) ;
<?php
/*扒取百度的页面*/
$curl = curl_init() ; //初始化curl
//设置一个curl传输选项
curl_setopt($curl, CURLOPT_URL, "http://www.baidu.com") ;//设置访问页面的URL
//将curl_exec()获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true) ;
//执行一个curl会话
$curl_output = curl_exec($curl) ;
//关闭
curl_close($curl) ;
echo str_replace("百度", "HAPPY", $curl_output) ;
初始化curl curl_init()
设置url
curl_setopt($curlobj, CURLOPT_URL, "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName") ;
设置请求头信息 curl_setopt($curlobj, CURLOPT_HEADER, 0) ;
设置请求头 CURLOPT_HTTPHEADER 设置post请求数据 CURLOPT_POSTFIELDS 设置请求头 请求方式 CURLOPT_POST 设置请求头 CURLOPT_USERAGENT参数 设置 将获取信息以文件流形式返回 CURLOPT_RETURNTRANSFER
<?php
/*
通过WebService查询北京天气信息
/WebServices/WeatherWebService.asmx/getWeatherbyCityName
*/
$data = "theCityName=北京" ;//多个用 &链接
//初始化curl
$curlobj = curl_init() ;
//设置url
curl_setopt($curlobj, CURLOPT_URL, "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName") ;
/*设置请求头信息*/
//CURLOPT_HEADER 启用时会将头文件的信息作为数据流输出。
curl_setopt($curlobj, CURLOPT_HEADER, 0) ;
//CURLOPT_RETURNTRANSFER 将curl_exec()获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1) ;
/*
CURLOPT_POST 启用时会发送一个常规的POST请求,类型为:application/x-www-form-urlencoded,就像表单提交的一样。
post提交设置下面四个参数
*/
// CURLOPT_USERAGENT 在HTTP请求中包含一个"User-Agent: "头的字符串。
curl_setopt($curlobj,CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($curlobj, CURLOPT_POST, 1) ;
//post数据
curl_setopt($curlobj, CURLOPT_POSTFIELDS, $data) ;
/*
CURLOPT_HTTPHEADER 一个用来设置HTTP头字段的数组。使用如下的形式的数组进行设置: array('Content-type: text/plain', 'Content-length: 100')
*/
curl_setopt($curlobj, CURLOPT_HTTPHEADER, array("application/x-www-form-urlencoded;charset=utf-8","Content-length: ".strlen($data)
)) ;
/*执行会话*/
$rtn = curl_exec($curlobj) ;
if(!curl_errno($curlobj)) {
// 若是没报错 返回执行结果
echo $rtn ;
//返回数据是xml格式的
file_put_contents('data.xml',$rtn) ;
}else {
echo 'Curl error: ' . curl_error($curlobj) ;
}
//关闭会话
curl_close($curlobj) ;
用cURL登录慕课网 并下载个人空间页面
登陆成功之后 重新爬的页面 登陆之后的跳转页面 设置cookie 先执行登录操作
<?php
/*
登录 并下载个人空间
先执行登录操作
设置cookie
登陆之后的跳转页面
登陆成功之后 重新爬的页面
*/
$data = "username=18301390328&password=XO0000xo0000&rememberMe=1" ;
//初始化
$curl = curl_init() ;
//设置URL
curl_setopt($curl, CURLOPT_URL, "https://passport.csdn.net/account/login") ;
//设置网页之后 以文件流的形式返回
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true) ;
//COOKIE 相关设置 需要在所有会话开始之前设置 ---保存登录信息
date_default_timezone_set("PRC") ; //先设置时区
/*
CURLOPT_COOKIESESSION 启用时curl会仅仅传递一个session cookie,忽略其他的cookie,默认状况下cURL会将所有的cookie返回给服务端。session cookie是指那些用来判断服务器端的session是否有效而存在的cookie。
*/
curl_setopt($curl, CURLOPT_COOKIESESSION, true) ;
/*
CURLOPT_COOKIEFILE 包含cookie数据的文件名,cookie文件的格式可以是Netscape格式,或者只是纯HTTP头部信息存入文件。
*/
curl_setopt($curl, CURLOPT_COOKIEFILE, "cookiefile") ;
/*
CURLOPT_COOKIEJAR 连接结束后保存cookie信息的文件。
*/
curl_setopt($curl, CURLOPT_COOKIEJAR, "cookiefile") ;
/*
CURLOPT_COOKIE 设定HTTP请求中"Cookie: "部分的内容。多个cookie用分号分隔,分号后带一个空格(例如, "fruit=apple; colour=red")。
*/
curl_setopt($curl, CURLOPT_COOKIE, session_name() . '=' .session_id()) ;
/*
CURLOPT_HEADER 启用时会将头文件的信息作为数据流输出。 不打印头部信息
*/
curl_setopt($curl, CURLOPT_HEADER, 0) ;
/*
CURLOPT_FOLLOWLOCATION 启用时会将服务器服务器返回的"Location: "放在header中递归的返回给服务器,使用CURLOPT_MAXREDIRS可以限定递归返回的数量。
登陆成功之后 网站默认设置 跳转到一个页面 此处跟踪到 否则会登陆失败
*/
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1) ;
/*
登录网站 post提交
*/
// CURLOPT_USERAGENT 在HTTP请求中包含一个"User-Agent: "头的字符串。
curl_setopt($curl,CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($curl, CURLOPT_POST, 1) ;
//post数据
curl_setopt($curl, CURLOPT_POSTFIELDS, $data) ;
/*
CURLOPT_HTTPHEADER 一个用来设置HTTP头字段的数组。使用如下的形式的数组进行设置: array('Content-type: text/plain', 'Content-length: 100')
*/
curl_setopt($curl, CURLOPT_HTTPHEADER, array("application/x-www-form-urlencoded;charset=utf-8","Content-length: ".strlen($data)
)) ;
//设置好之后 执行登录操作
curl_exec($curl) ;
//设置URL 设置要爬的网页
curl_setopt($curl, CURLOPT_URL, "https://blog.csdn.net/donglingjiu") ;
//不是post提交 将上面的post关闭
curl_setopt($curl, CURLOPT_POST, 0) ;
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-type: text/html")) ;
//执行
$output = curl_exec($curl) ;
echo $output ;
file_put_contents('data.html', $output) ;
curl_close($curl) ;
用cURL从FTP上下载文件到本地
关闭资源句柄 本地打开资源句柄 将下载的文件写入 设置链接ftp的账号密码 设置超时时间 设置URL 目标文件在ftp上的完整路径
<?php
/*
从FTP服务器下载文件到本地
*/
//初始化
$curl = curl_init() ;
//设置下载文件的完整URL
curl_setopt($curl, CURLOPT_URL, "ftp://192.168.1.100/a.txt") ;
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1) ;
//如果文件太大 中断传输 设置超时时间 单位/秒
curl_setopt($curl, CURLOPT_TIMEOUT, 300) ;
/*
CURLOPT_USERPWD 传递一个连接中需要的用户名和密码,格式为:"[username]:[password]"。
*/
curl_setopt($curl, CURLOPT_USERPWD, "root:123456") ;//ftp登录密码
//打开资源句柄
$outfile = fopen('data.txt','wb') ;//保存到本地的文件名
//ftp上的文件下载到本地
curl_setopt($curl, CURLOPT_FILE, $outfile) ;
$rtn = curl_exec($curl) ;
//关闭资源句柄 防止资源泄露
fclose($outfile) ;
if(!curl_errno($curl)) {
echo "RETURN: " .$rtn ;
}else {
echo 'Curl error: ' .curl_error($curl) ;
}
用cURL从本地上传文件到FTP
设置ftp链接账号密码curl_setopt($curl, CURLOPT_USERPWD, "root:123456") ; 超时时间curl_setopt($curl, CURLOPT_TIMEOUT, 300) ; 设置上传路径 打开本地将要上传的文件 ---资源句柄$fp = fopen($localfile, 'r') ;
设置本地将要上传的出文件$localfile = 'data.txt' ;
关闭资源句柄fclose($fp) ; 执行上传 $rtn = curl_exec($curl) ; 设置上传文件大小curl_setopt($curl, CURLOPT_INFILESIZE, filesize($localfile)) ; 读取文件地址 (资源类型)curl_setopt($curl, CURLOPT_INFILE, $fp) ; 开启上传curl_setopt($curl, CURLOPT_UPLOAD, true) ;
<?php
/*
curl上传文件到ftp服务器
设置本地将要上传的出文件$localfile = 'data.txt' ;
打开本地将要上传的文件 ---资源句柄$fp = fopen($localfile, 'r') ;
设置上传路径
超时时间curl_setopt($curl, CURLOPT_TIMEOUT, 300) ;
设置ftp链接账号密码curl_setopt($curl, CURLOPT_USERPWD, "root:123456") ;
开启上传curl_setopt($curl, CURLOPT_UPLOAD, true) ;
读取文件地址 (资源类型)curl_setopt($curl, CURLOPT_INFILE, $fp) ;
设置上传文件大小curl_setopt($curl, CURLOPT_INFILESIZE, filesize($localfile)) ;
执行上传 $rtn = curl_exec($curl) ;
关闭资源句柄fclose($fp) ;
*/
//初始化
$curl = curl_init() ;
//本地文件
$localfile = 'data.txt' ;
$fp = fopen($localfile, 'r') ;
//设置上传文件的完整URL
curl_setopt($curl, CURLOPT_URL, "ftp://192.168.1.100/a.txt") ;
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1) ;
//如果文件太大 中断传输 设置超时时间 单位/秒
curl_setopt($curl, CURLOPT_TIMEOUT, 300) ;
/*
CURLOPT_USERPWD 传递一个连接中需要的用户名和密码,格式为:"[username]:[password]"。
*/
curl_setopt($curl, CURLOPT_USERPWD, "root:123456") ;//ftp登录密码
/*
CURLOPT_UPLOAD 启用后允许文件上传。
*/
curl_setopt($curl, CURLOPT_UPLOAD, true) ;
/*
CURLOPT_INFILE 在上传文件的时候需要读取的文件地址,值是一个资源类型。
*/
curl_setopt($curl, CURLOPT_INFILE, $fp) ;
/*
CURLOPT_INFILESIZE 设定上传文件的大小限制,字节(byte)为单位。
*/
curl_setopt($curl, CURLOPT_INFILESIZE, filesize($localfile)) ;
$rtn = curl_exec($curl) ;
//关闭资源句柄 防止资源泄露
fclose($fp) ;
if(!curl_errno($curl)) {
echo "Upload successfully!";
}else {
echo 'Curl error: ' .curl_error($curl) ;
}
用cURL访问HTTPS资源
终止从服务端进行验证curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0) ; 设置超时时间 证书有时效性date_default_timezone_set("PRC") ;//时区 设置资源路径
<?php
/*
访问网络上HTTPS资源
设置资源路径
设置超时时间 证书有时效性date_default_timezone_set("PRC") ;//时区
终止从服务端进行验证curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0) ;
*/
$curl = curl_init() ;
//访问资源路径
curl_setopt($curl, CURLOPT_URL, "https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&rsv_idx=1&tn=baidu&wd=mukewang&oq=csdn&rsv_pq=fa82833d0004dff1&rsv_t=acb8Xzabi9QT%2FhDzKxewbLkrRu%2FfynlkjLIw8V2jTbvtRd4FdJ6Vr3D7Sxw&rqlang=cn&rsv_enter=1&inputT=7122&rsv_sug3=64&rsv_sug1=51&rsv_sug7=100&rsv_sug2=0&prefixsug=mukewang&rsp=0&rsv_sug4=7835") ;
//执行之后 文件流传输
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true) ;
//设置HTTPS支持 证书有时效性
date_default_timezone_set("PRC") ;//时区
/*
CURLOPT_SSL_VERIFYPEER 禁用后cURL将终止从服务端进行验证。使用CURLOPT_CAINFO选项设置证书使用CURLOPT_CAPATH选项设置证书目录 如果CURLOPT_SSL_VERIFYPEER(默认值为2)被启用,CURLOPT_SSL_VERIFYHOST需要被设置成TRUE否则设置为FALSE。
*/
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0) ;
$output = curl_exec($curl) ;
curl_close($curl) ;
echo $output ;
file_put_contents('data.html', $output) ;