php中curl的用法

简单的例子

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

$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

参考

时间: 2024-10-10 08:51:43

php中curl的用法的相关文章

curl命令用法

例: char buf[512] = { 0 };sprintf(buf,"curl %s/NewWanbu/App/Api/index.php/Report/sEmail/aid/%d/reportType/final/",g_profile.m_confData.m_url.c_str(),activeID); //curl http://wanbu.lvzy/NewWanbu/App/Api/index.php/Report/sEmail/aid/3429/reportType/

Oracle 中 decode 函数用法

Oracle 中 decode 函数用法 含义解释:decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下:IF 条件=值1 THEN RETURN(翻译值1)ELSIF 条件=值2 THEN RETURN(翻译值2) ......ELSIF 条件=值n THEN RETURN(翻译值n)ELSE RETURN(缺省值)END IFdecode(字段或字段的运算,值1,值2,值3) 这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值

linux中快捷键的用法

linux中快捷键的用法 1.1 常见快捷键 ctrl + a 把光标移动到行首 ctrl + e 把光标移动到行尾 ctrl + c 撤销当前的操作=cancel ctrl + d logout命令(当前行没有任何内容,退出当前用户),删除光标所在位置后面的一个符号,文本 ctrl + l(小写字母L)清除屏幕内容 ctrl +u 剪切光标所在位置到行首内容 ctrl +k 剪切光标所在位置到行尾内容 ctrl +y 粘贴 ctrl + r search搜索历史命令,继续搜索,查找历史命令 

thinkphp中I(&quot;parm&quot;)用法的注意事项

php中用来传输的方式有两种$_GET 和 $_POST, thinkphp 提供了一种兼容两中传输方式的做法I(“param”) 但是请注意:在使用php中的函数时需要传入参数时不能用I(“parm”),必须使用采用的传输方式$_GET 或 $_POST传入,否则出错 thinkphp中I("parm")用法的注意事项,布布扣,bubuko.com

ASP.NET在实际开发中验证码的用法

在网上有看到很多关于验证码的代码,很多都只是生成一张验证码图片,然而在实际登陆验证模块,验证码要怎么添加进去或者说怎么运用.和实际项目开发中要怎么使用验证码,我自己总结了几点. 一.在实际开发登陆模块的验证码,程序员是将验证码的文本值(字符串)存在Session中的,然后在登陆验证的时候,通过Session取值进行判断的,这样效率会高很多. 二.然而在写验证码的时候要想通过Session存值,就必须实现System.Web.SessionState.IRequiresSessionState这个

Http原理及PHP中cURL的使用

为了给接下来的教程做好铺垫,本文将讲述如何用PHP发出Http请求进行模拟登录,顺带会讲一些Http请求原理.模拟登录…就是模拟浏览器登录嘛,所谓请求,只不过是你向网站发一些字,网站又给你回复一些字,这一般都是基于Http或Https协议的.平时是浏览器帮我们做好了这些工作,封装数据发送到指定网站,然后接收,最后编译成网页显示出来.在模拟登录中,呵呵,这些都要我们自己做,只是最后不用编译…只要提取到需要的数据就行了. PHP中模拟登录有三种方式.第一是直接用file_get_contens(网站

objective-c 中随机数的用法 (3种:arc4random() 、random()、CCRANDOM_0_1() )

1.随机数的使用      1).arc4random() 比较精确不需要生成随即种子 使用方法 : 通过arc4random() 获取0到x-1之间的整数的代码如下: int value = arc4random() % x; 获取1到x之间的整数的代码如下: int value = (arc4random() % x) + 1; 2).CCRANDOM_0_1() cocos2d中使用 ,范围是[0,1] 使用方法: float random = CCRANDOM_0_1() * 5; //

[Perl系列—] 2. Perl 中的引用用法

Perl 中的引用,为什么要使用引用? 对于熟悉C语言的开发者来说, 指针这个概念一定不陌生. Perl 的引用就是指针,可以指向变量.数组.哈希表甚至子程序. Perl5中的两种Perl引用类型为硬Perl引用和符号Perl引用.符号Perl引用含有变量的名字,它对运行时创建变量名并定位很有用,基本上,符号Perl引用就象文件名或UNIX系统中的软链接.而硬Perl引用则象文件系统中的硬链接. Perl4只允许符号Perl引用,给使用造成一些困难.例如,只允许通过名字对包的符号名哈希表(名为_

String的replaceAll方法中的正则表达式用法

项目里面 需要对已手机号码进行 如下的显示 比如15088688388 要显示为150****8388的效果 实现这个简单的效果 方法有很多 我想试试用正则表达式去实现 查了点资料最终试出来以下方法可行 System.out.println("15088688388".replaceAll("(\\d{3})(\\d{4})","$1****")); 输出结果:150****8388 首先对replaceAll方法的第一个参数进行解释 第一个参数