码迷,mamicode.com
首页 > Web开发 > 详细

php中curl的用法

时间:2016-05-06 15:45:28      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:

简单的例子

首先给出一个最简单的例子

$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_CONNECTTIMEOUTCURLOPT_TIMEOUTCURLOPT_CONNECTTIMEOUT_MSCURLOPT_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_VERIFYPEERCURLOPT_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_MAXREDIRSCURLOPT_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_PROXYCURLOPT_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_getinfoCURLINFO_HTTP_CODEcurl_error

参考

php中curl的用法

标签:

原文地址:http://blog.csdn.net/zhyoulun/article/details/51318015

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!