简单的例子

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

$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

参考

  • cURL 函数
  • What’s the difference between CURLOPT_CONNECTTIMEOUT and CURLOPT_TIMEOUT?

php中curl的用法相关推荐

  1. Linux系统中curl命令用法详解

    在Linux系统中curl是一个利用URL规则在命令行下工作的文件传输工具,是一款强大的http命令行工具.它支持文件的上传和下载,是综合传输工具. curl 是常用的命令行工具,用来请求 Web 服 ...

  2. curl 的用法指南

    curl 的用法指南 转自:http://www.ruanyifeng.com/blog/2019/09/curl-reference.html 作者: 阮一峰 日期: 2019年9月 5日 简介 c ...

  3. linux wget返回值_Linux中curl命令和wget命令的使用介绍与比较

    原文链接: 这篇文章主要给大家介绍了Linux中curl命令和wget命令使用以及这两者之间的区别比较,curl和wget命令都是Linux下的工具,可以用来下载文件.文中介绍的非常详细,相信对大家具 ...

  4. Linux中curl命令详解(做定时任务超级有用)!

    Linux curl命令详解 命令:curl 在kingle中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具.它支持文件的上传和下载,是综合传输工具, ...

  5. Linux之curl命令用法指南学习

    Linux之curl命令用法指南学习 前言 常用参数 命令样例 其他 参考链接 前言 应用场景 工作中经常需要用到curl命令在测试或生产服务器中测试第三方接口,尤其是一些内外网接口.判断线上接口信息 ...

  6. mysql中change用法,mysql 中alter的用法以及一些步骤

    mysql 中alter的用法以及一些方法 在用到alter的时间,查到了这个文章,就copy下来了,详细进入下面链接: MySQL之alter语句用法总结 1:删除列 ALTER TABLE [表名 ...

  7. mysql中正则表达式的用法_Mysql中正则表达式Regexp常见用法

    Mysql中Regexp常见用法 模糊匹配,包含特定字符串 # 查找content字段中包含"车友俱乐部"的记录 select * from club_content where ...

  8. 【C++】C/C++ 中 static 的用法全局变量与局部变量

    C/C++ 中 static 的用法全局变量与局部变量 目录 1. 什么是static? 1.1 static 的引入 1.2 静态数据的存储 2. 在 C/C++ 中static的作用 2.1 总的 ...

  9. php foreach嵌套foreach,php中foreach怎么嵌套foreach PHP中foreach函数用法?

    foreach的使用方法小编不是很明确,分享达人指教一下.foreach (array_expressforeach($array as $key) { if(xxxx) { break; //bre ...

  10. python中str的index什么意思_python中index的用法是什么

    index() 一般用处是在序列中检索参数并返回第一次出现的索引,没找到就会报错,比如:>>> t=tuple('Allen') >>> t ('A', 'l', ...

最新文章

  1. bert+lstm+crf ner实体识别
  2. Python黑帽编程 3.1 ARP欺骗
  3. UISegmentedControl (待续)
  4. python windows系统_python管理windows系统tomcat服务
  5. 框架:SpringBoot构建Restful service完成Get和Post请求
  6. zabbix通过JMX监控Tomcat及一些报错
  7. html中hr的各种样式使用
  8. vSphere虚拟化使用第三方备份方案常见CBT故障实战处理
  9. 乘“峰”而上,聚生态之力共创软件产业新未来
  10. java引用型变量_java-有没有办法用类型变量引用当前类型?
  11. 使用MVC2模式创建新闻网站
  12. 求解线性方程的数值方法——Matlab中实现算法
  13. 人工智能行业知识 - AI应用场景
  14. Python实现某du内容下载, 保存到word文档
  15. 关于STM8的程序下载问题:SWIM Error[30006]报错解决办法汇总
  16. 重要短信通知解决方案(短信通知+语音播报自动双呼)
  17. 英文字体设计标志需要注意什么?
  18. 2020年数学建模国赛C题Demo【准确率只有61%,仅供参考】
  19. 你知道做一个网站要多少钱网站怎么运营能赚钱
  20. 用计算机画有常数的函数图像,信息技术应用 用计算机画函数图象ppt配用优秀获奖教案...

热门文章

  1. 自从有了计算机和网络才有信息技术,2015年信息技术会考模拟选择题6(俞同明版)...
  2. 《WebGL编程指南》学习笔记——1.WebGL概述
  3. 题目477- A+B Problem III (陷阱题)
  4. 杨辉三角c语言 用队列形式,C语言杨辉三角(循环队列).doc
  5. php tp框架文档,Thinkphp 框架基础之入口文件功能、定义与用法分析
  6. csv反序列化_Py't'hon之csv,ini序列化,反序列化
  7. 实例mysql范式_数据库范式的范式应用实例
  8. 比赛打分时,管理员如何完成的选手分类排行展示?
  9. php array_walk和array_walk_recursive对数组中的每个元素应用用户自定义函数
  10. RedisTemplate和StringRedisTemplate在项目中应用