简单的例子
首先给出一个最简单的例子
$url = "http://zhyoulun.com";
$ch = curl_init($url); //初始化一个cURL会话
curl_exec($ch); //执行一个cURL会话
curl_close($ch); //关闭一个cURL会话
运行之后可以看到,网页的源代码被打印了出来。
将网页源代码存储到变量中
$url = "http://zhyoulun.com";
$ch = curl_init($url); //初始化一个cURL会话
//设置cURL传输选项
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //将curl_exec()获取的信息以字符串返回,而不是直接输出。
$content = curl_exec($ch); //执行一个cURL会话
curl_close($ch); //关闭一个cURL会话
echo $content."\n"; //输出网页源代码
这里用到了参数CURLOPT_RETURNTRANSFER
不输出头文件
$url = "http://zhyoulun.com";
$ch = curl_init($url); //初始化一个cURL会话
//设置cURL传输选项
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //将curl_exec()获取的信息以字符串返回,而不是直接输出。
curl_setopt($ch, CURLOPT_HEADER, false); //不输出头文件,如果设为true,获得的网页源代码最前边会带有‘HTTP/1.1 200 OK‘等内容
$content = curl_exec($ch); //执行一个cURL会话
curl_close($ch); //关闭一个cURL会话
echo $content."\n"; //输出网页源代码
这里用到了参数CURLOPT_HEADER
将网页源代码输出到文件
$url = "http://zhyoulun.com";
$fp = fopen("output.dat", "w");
$ch = curl_init($url); //初始化一个cURL会话
//设置cURL传输选项
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //将curl_exec()获取的信息以字符串返回,而不是直接输出。
curl_setopt($ch, CURLOPT_HEADER, false); //不输出头文件,如果设为true,获得的网页源代码最前边会带有‘HTTP/1.1 200 OK‘等内容
curl_setopt($ch, CURLOPT_FILE, $fp); //设置输出文件,默认为STDOUT (浏览器)。
curl_exec($ch); //执行一个cURL会话
curl_close($ch); //关闭一个cURL会话
fclose($fp);
这里用到了参数CURLOPT_FILE
指定userAgent
userAgent属性是一个只读的字符串,声明了浏览器用于HTTP请求的用户代理头的值。在每次浏览器(邮件客户端/搜索引擎蜘蛛)进行HTTP请求时发送到服务器,服务器就知道了用户是使用什么浏览器(邮件客户端/搜索引擎蜘蛛)来访问的。
这里有各种浏览器的userAgent的搜集。
获取自己使用的浏览器的userAgent的方法
<script>
javascript:alert(navigator.userAgent)
</script>
或者便于复制的
<script>
window.onload=function(){
document.getElementById("content").innerHTML = ""+navigator.userAgent;
}
</script>
<div id="content"></div>
我当前使用的浏览器的userAgent为Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36
$url = "http://zhyoulun.com";
$ch = curl_init($url); //初始化一个cURL会话
//设置cURL传输选项
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //将curl_exec()获取的信息以字符串返回,而不是直接输出。
curl_setopt($ch, CURLOPT_HEADER, false); //不输出头文件,如果设为true,获得的网页源代码最前边会带有‘HTTP/1.1 200 OK‘等内容
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36"); //在HTTP请求中包含一个"User-Agent: "头的字符串。
$content = curl_exec($ch); //执行一个cURL会话
curl_close($ch); //关闭一个cURL会话
echo $content."\n"; //输出网页源代码
这里用到了参数CURLOPT_USERAGENT
连接超时 和 获取超时
$url = "http://zhyoulun.com";
$ch = curl_init($url); //初始化一个cURL会话
//设置cURL传输选项
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //将curl_exec()获取的信息以字符串返回,而不是直接输出。
curl_setopt($ch, CURLOPT_HEADER, false); //不输出头文件,如果设为true,获得的网页源代码最前边会带有‘HTTP/1.1 200 OK‘等内容
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36"); //在HTTP请求中包含一个"User-Agent: "头的字符串。
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15); //在尝试连接时等待的秒数。设置为0,则无限等待。这里设置为15秒
curl_setopt($ch, CURLOPT_TIMEOUT, 30); //允许 cURL 函数执行的最长秒数。这里设置为30秒
$content = curl_exec($ch); //执行一个cURL会话
curl_close($ch); //关闭一个cURL会话
echo $content."\n"; //输出网页源代码
CURLOPT_CONNECTTIMEOUT用来告诉PHP脚本在成功连接服务器前等待多久(连接成功之后就会开始缓冲输出),这个参数是为了应对目标服务器的过载,下线,或者崩溃等可能状况;
CURLOPT_TIMEOUT用来告诉成功PHP脚本,从服务器接收缓冲完成前需要等待多长时间。如果目标是个巨大的文件,生成内容速度过慢或者链路速度过慢,这个参数就会很有用。
使用cURL下载MP3文件是一个对开发人员来说不错的例子。CURLOPT_CONNECTTIMEOUT
可以设置为10秒,标识如果服务器10秒内没有响应,脚本就会断开连接;CURLOPT_TIMEOUT可以设置为100,如果MP3文件100秒内没有下载完成,脚本将会断开连接。
CURLOPT_CONNECTTIMEOUT_MS
,尝试连接等待的时间,以毫秒为单位。设置为0,则无限等待。 如果 libcurl 编译时使用系统标准的名称解析器( standard system name resolver),那部分的连接仍旧使用以秒计的超时解决方案,最小超时时间还是一秒钟。
CURLOPT_TIMEOUT_MS
,设置cURL允许执行的最长毫秒数。 如果 libcurl 编译时使用系统标准的名称解析器( standard system name resolver),那部分的连接仍旧使用以秒计的超时解决方案,最小超时时间还是一秒钟。
这里用到了参数CURLOPT_CONNECTTIMEOUT
、CURLOPT_TIMEOUT
、CURLOPT_CONNECTTIMEOUT_MS
、CURLOPT_TIMEOUT_MS
访问https的网页或文件
$url = "https://github.com";
$ch = curl_init($url); //初始化一个cURL会话
//设置cURL传输选项
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //将curl_exec()获取的信息以字符串返回,而不是直接输出。
curl_setopt($ch, CURLOPT_HEADER, false); //不输出头文件,如果设为true,获得的网页源代码最前边会带有‘HTTP/1.1 200 OK‘等内容
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36"); //在HTTP请求中包含一个"User-Agent: "头的字符串。
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15); //在尝试连接时等待的秒数。设置为0,则无限等待。这里设置为15秒
curl_setopt($ch, CURLOPT_TIMEOUT, 30); //允许 cURL 函数执行的最长秒数。这里设置为30秒
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //禁止 cURL 验证对等证书(peer‘s certificate)。
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //
$content = curl_exec($ch); //执行一个cURL会话
curl_close($ch); //关闭一个cURL会话
echo $content."\n"; //输出网页源代码
这里用到了参数CURLOPT_SSL_VERIFYPEER
、CURLOPT_SSL_VERIFYHOST
设置重定向次数
$url = "https://github.com/yiisoft/yii2/archive/2.0.8.zip";
$ch = curl_init($url); //初始化一个cURL会话
//设置cURL传输选项
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //将curl_exec()获取的信息以字符串返回,而不是直接输出。
curl_setopt($ch, CURLOPT_HEADER, false); //不输出头文件,如果设为true,获得的网页源代码最前边会带有‘HTTP/1.1 200 OK‘等内容
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36"); //在HTTP请求中包含一个"User-Agent: "头的字符串。
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15); //在尝试连接时等待的秒数。设置为0,则无限等待。这里设置为15秒
curl_setopt($ch, CURLOPT_TIMEOUT, 30); //允许 cURL 函数执行的最长秒数。这里设置为30秒
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //禁止 cURL 验证对等证书(peer‘s certificate)。
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //
curl_setopt($ch, CURLOPT_MAXREDIRS, 3); //指定最多的 HTTP 重定向次数,这里设置为3次
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); //TRUE 时将会根据服务器返回 HTTP 头中的 "Location: " 重定向。
$content = curl_exec($ch); //执行一个cURL会话
curl_close($ch); //关闭一个cURL会话
echo $content."\n"; //输出网页源代码
下载这个文件时,如果不设置重定向,会获取到网页源代码
<html><body>You are being <a href="https://codeload.github.com/yiisoft/yii2/zip/2.0.8">redirected</a>.</body></html>
这里用到了参数CURLOPT_MAXREDIRS
、CURLOPT_FOLLOWLOCATION
使用socket5代理
$url = "https://zhyoulun.com";
$ch = curl_init($url); //初始化一个cURL会话
//设置cURL传输选项
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //将curl_exec()获取的信息以字符串返回,而不是直接输出。
curl_setopt($ch, CURLOPT_HEADER, false); //不输出头文件,如果设为true,获得的网页源代码最前边会带有‘HTTP/1.1 200 OK‘等内容
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36"); //在HTTP请求中包含一个"User-Agent: "头的字符串。
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15); //在尝试连接时等待的秒数。设置为0,则无限等待。这里设置为15秒
curl_setopt($ch, CURLOPT_TIMEOUT, 30); //允许 cURL 函数执行的最长秒数。这里设置为30秒
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //禁止 cURL 验证对等证书(peer‘s certificate)。
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //
curl_setopt($ch, CURLOPT_MAXREDIRS, 3); //指定最多的 HTTP 重定向次数,这里设置为3次
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); //TRUE 时将会根据服务器返回 HTTP 头中的 "Location: " 重定向。
curl_setopt($ch, CURLOPT_PROXY,‘127.0.0.1:10000‘); //
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); //
$content = curl_exec($ch); //执行一个cURL会话
curl_close($ch); //关闭一个cURL会话
echo $content."\n"; //输出网页源代码
die();
这里用到了参数CURLOPT_PROXY
、CURLOPT_PROXYTYPE
输出错误信息
$url = "https://zhyoulun.com";
$ch = curl_init($url); //初始化一个cURL会话
//设置cURL传输选项
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //将curl_exec()获取的信息以字符串返回,而不是直接输出。
curl_setopt($ch, CURLOPT_HEADER, false); //不输出头文件,如果设为true,获得的网页源代码最前边会带有‘HTTP/1.1 200 OK‘等内容
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36"); //在HTTP请求中包含一个"User-Agent: "头的字符串。
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15); //在尝试连接时等待的秒数。设置为0,则无限等待。这里设置为15秒
curl_setopt($ch, CURLOPT_TIMEOUT, 30); //允许 cURL 函数执行的最长秒数。这里设置为30秒
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //禁止 cURL 验证对等证书(peer‘s certificate)。
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //
curl_setopt($ch, CURLOPT_MAXREDIRS, 3); //指定最多的 HTTP 重定向次数,这里设置为3次
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); //TRUE 时将会根据服务器返回 HTTP 头中的 "Location: " 重定向。
curl_setopt($ch, CURLOPT_PROXY,‘127.0.0.1:10000‘); //
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); //
$content = curl_exec($ch); //执行一个cURL会话
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if($httpCode!=200)
{
echo "code: ".$httpCode."\n";
$error = curl_error($ch);
echo "error: ".$error."\n";
}
curl_close($ch); //关闭一个cURL会话
echo $content."\n"; //输出网页源代码
这里用到了curl_getinfo
、CURLINFO_HTTP_CODE
、curl_error