好得很程序员自学网
  • 首页
  • 后端语言
    • C#
    • PHP
    • Python
    • java
    • Golang
    • ASP.NET
  • 前端开发
    • Angular
    • react框架
    • LayUi开发
    • javascript
    • HTML与HTML5
    • CSS与CSS3
    • jQuery
    • Bootstrap
    • NodeJS
    • Vue与小程序技术
    • Photoshop
  • 数据库技术
    • MSSQL
    • MYSQL
    • Redis
    • MongoDB
    • Oracle
    • PostgreSQL
    • Sqlite
    • 数据库基础
    • 数据库排错
  • CMS系统
    • HDHCMS
    • WordPress
    • Dedecms
    • PhpCms
    • 帝国CMS
    • ThinkPHP
    • Discuz
    • ZBlog
    • ECSHOP
  • 高手进阶
    • Android技术
    • 正则表达式
    • 数据结构与算法
  • 系统运维
    • Windows
    • apache
    • 服务器排错
    • 网站安全
    • nginx
    • linux系统
    • MacOS
  • 学习教程
    • 前端脚本教程
    • HTML与CSS 教程
    • 脚本语言教程
    • 数据库教程
    • 应用系统教程
  • 新技术
  • 编程导航
    • 区块链
    • IT资讯
    • 设计灵感
    • 建站资源
    • 开发团队
    • 程序社区
    • 图标图库
    • 图形动效
    • IDE环境
    • 在线工具
    • 调试测试
    • Node开发
    • 游戏框架
    • CSS库
    • Jquery插件
    • Js插件
    • Web框架
    • 移动端框架
    • 模块管理
    • 开发社区
    • 在线课堂
    • 框架类库
    • 项目托管
    • 云服务

当前位置:首页>CMS系统>Dedecms
<tfoot draggable='sEl'></tfoot>

phpcurl案例 php的curl实例

很多站长朋友们都不太清楚phpcurl案例,今天小编就来给大家整理phpcurl案例,希望对各位有所帮助,具体内容如下:

本文目录一览: 1、 求一个php的curl示例 2、 php curl如何直接转发当前php接收的headers?get请求如何直接转发get参数?post请求如何直接转发post参数? 3、 php curl选项列表(超详细) 4、 php curl get 下载远程zip文件保存在本地例子 5、 解析php中curl 6、 php curl 模拟登录并获取数据实例详解 求一个php的curl示例

function?PHPPOST($url,$data=null){

???????$curl?=?curl_init();?//?启动一个CURL会话

???????curl_setopt($curl,?CURLOPT_URL,?$url);?//?要访问的地址

???????curl_setopt($curl,?CURLOPT_SSL_VERIFYPEER,?false);?//?对认证证书来源的检查

???????curl_setopt($curl,?CURLOPT_SSL_VERIFYHOST,?false);?//?从证书中检查SSL加密算法是否存在

???????curl_setopt($curl,?CURLOPT_USERAGENT,?$_SERVER['HTTP_USER_AGENT']);?//?模拟用户使用的浏览器

???????if($data?!=?null){

???????????curl_setopt($curl,?CURLOPT_POST,?1);?//?发送一个常规的Post请求

???????????curl_setopt($curl,?CURLOPT_POSTFIELDS,?$data);?//?Post提交的数据包

???????}

???????curl_setopt($curl,?CURLOPT_TIMEOUT,?300);?//?设置超时限制防止死循环

???????curl_setopt($curl,?CURLOPT_HEADER,?0);?//?显示返回的Header区域内容

???????curl_setopt($curl,?CURLOPT_RETURNTRANSFER,?1);?//?获取的信息以文件流的形式返回

???????$info?=?curl_exec($curl);?//?执行操作

???????if?(curl_errno($curl))?{

???????????echo?'Errno:'.curl_getinfo($curl);//捕抓异常

???????????dump(curl_getinfo($curl));

???????}

???????return?$info;

???}

php curl如何直接转发当前php接收的headers?get请求如何直接转发get参数?post请求如何直接转发post参数?

本文实例讲述了php使用CURL模拟GET与POST向微信接口提交及获取数据的方法。分享给大家供大家参考,具体如下:

php CURL函数可以模仿用户进行一些操作,如我们可以模仿用户提交数据也可以模仿用户进行网站访问了,下面我们来介绍利用CURL模拟进行微信接口的GET与POST例子,例子非常的简单就两个:

Get提交获取数据

/**

* @desc 获取access_token

* @return String access_token

*/

function getAccessToken(){

$AppId = '1232assad13213123';

$AppSecret = '2312312321adss3123213';

$getUrl = 'htq测试数据/cgi-bin/token?grant_type=client_credentialappid='.$AppId.'secret='.$AppSecret;

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $getUrl);

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURL_SSLVERSION_SSL, 2);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

$data = curl_exec($ch);

$response = json_decode($data);

return $response->access_token;

}

post提交获取数据

/**

* @desc 实现天气内容回复

*/

public function testWeixin(){

$access_token = $this->getAccessToken();

$customMessageSendUrl = 'ht.qq测试数据/cgi-bin/message/custom/send?access_token='.$access_token;

$description = '今天天气的详细信息(从第三方获取)。';

$url = ttpr测试数据/';

$picurl = 'her测试数据/';

$postDataArr = array(

'touser'=>'OPENID',

'msgtype'=>'news',

'news'=>array(

'articles'=>array(

'title'=>'当天天气',

'description'=>$description,

'url'=>$url,

'picurl'=>$picurl,

),

),

);

$postJosnData = json_encode($postDataArr);

$ch = curl_init($customMessageSendUrl);

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS, $postJosnData);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

$data = curl_exec($ch);

var_dump($data);

}

例子相对来说比较简单也没有什么好详细分析的了,大家照抄就可以实现我们想要的功能了.

php curl选项列表(超详细)

本篇文章是对php中的curl选项列表进行了详细的分析介绍 需要的朋友参考下 ?

第一类 对于下面的这些option的可选参数 value应该被设置一个bool类型的值 选项 可选value值 备注 CURLOPT_AUTOREFERER 当根据Location:重定向时 自动设置header中的Referer:信息 CURLOPT_BINARYTRANSFER 在启用CURLOPT_RETURNTRANSFER的时候 返回原生的(Raw)输出 CURLOPT_COOKIESESSION 启用时curl会仅仅传递一个session cookie 忽略其他的cookie 默认状况下cURL会将所有的cookie返回给服务端 session cookie是指那些用来判断服务器端的session是否有效而存在的cookie CURLOPT_CRLF 启用时将Unix的换行符转换成回车换行符 CURLOPT_DNS_USE_GLOBAL_CACHE 启用时会启用一个全局的DNS缓存 此项为线程安全的 并且默认启用 CURLOPT_FAILONERROR 显示HTTP状态码 默认行为是忽略编号小于等于 的HTTP信息 CURLOPT_FILETIME 启用时会尝试修改远程文档中的信息 结果信息会通过 curl_getinfo()函数的CURLINFO_FILETIME选项返回 curl_getinfo() CURLOPT_FOLLOWLOCATION 启用时会将服务器服务器返回的"Location: "放在header中递归的返回给服务器 使用CURLOPT_MAXREDIRS可以限定递归返回的数量 CURLOPT_FORBID_REUSE 在完成交互以后强迫断开连接 不能重用 CURLOPT_FRESH_CONNECT 强制获取一个新的连接 替代缓存中的连接 CURLOPT_FTP_USE_EPRT 启用时当FTP下载时 使用EPRT (或 LPRT)命令 设置为FALSE时禁用EPRT和LPRT 使用PORT命令 only CURLOPT_FTP_USE_EPSV 启用时 在FTP传输过程中回复到PASV模式前首先尝试EPSV命令 设置为FALSE时禁用EPSV命令 CURLOPT_FTPAPPEND 启用时追加写入文件而不是覆盖它 CURLOPT_FTPASCII CURLOPT_TRANSFERTEXT的别名 CURLOPT_FTPLISTONLY 启用时只列出FTP目录的名字 CURLOPT_HEADER 启用时会将头文件的信息作为数据流输出 CURLINFO_HEADER_OUT 启用时追踪句柄的请求字符串 从 PHP 开始可用 CURLINFO_前缀是故意的(intentional) CURLOPT_HTTPGET 启用时会设置HTTP的method为GET 因为GET是默认是 所以只在被修改的情况下使用 CURLOPT_HTTPPROXYTUNNEL 启用时会通过HTTP代理来传输 CURLOPT_MUTE 启用时将cURL函数中所有修改过的参数恢复默认值 CURLOPT_NETRC 在连接建立以后 访问~/ netrc文件获取用户名和密码信息连接远程站点 CURLOPT_NOBODY 启用时将不对HTML中的BODY部分进行输出 CURLOPT_NOPROGRESS 启用时关闭curl传输的进度条 此项的默认设置为启用 Note: PHP自动地设置这个选项为TRUE 这个选项仅仅应当在以调试为目的时被改变 CURLOPT_NOSIGNAL 启用时忽略所有的curl传递给php进行的信号 在SAPI多线程传输时此项被默认启用 cURL 时被加入 CURLOPT_POST 启用时会发送一个常规的POST请求 类型为 application/x form urlencoded 就像表单提交的一样 CURLOPT_PUT 启用时允许HTTP发送文件 必须同时设置CURLOPT_INFILE和CURLOPT_INFILESIZE CURLOPT_RETURNTRANSFER 将 curl_exec()获取的信息以文件流的形式返回 而不是直接输出 CURLOPT_SSL_VERIFYPEER 禁 用后cURL将终止从服务端进行验证 使用CURLOPT_CAINFO选项设置证书使用CURLOPT_CAPATH选项设置证书目录 如果CURLOPT_SSL_VERIFYPEER(默认值为 )被启用 CURLOPT_SSL_VERIFYHOST需要被设置成TRUE否则设置为 FALSE 自cURL 开始默认为TRUE 从cURL 开始默认绑定安装 CURLOPT_TRANSFERTEXT 启用后对FTP传输使用ASCII模式 对于LDAP 它检索纯文本信息而非HTML 在Windows系统上 系统不会把STDOUT设置成binary模式 CURLOPT_UNRESTRICTED_AUTH 在使用CURLOPT_FOLLOWLOCATION产生的header中的多个locations中持续追加用户名和密码信息 即使域名已发生改变 CURLOPT_UPLOAD 启用后允许文件上传 CURLOPT_VERBOSE 启用时会汇报所有的信息 存放在STDERR或指定的CURLOPT_STDERR中 第二类 对于下面的这些option的可选参数 value应该被设置一个integer类型的值 选项 可选value值 备注 CURLOPT_BUFFERSIZE 每次获取的数据中读入缓存的大小 但是不保证这个值每次都会被填满 在cURL 中被加入 CURLOPT_CLOSEPOLICY 不是CURLCLOSEPOLICY_LEAST_RECENTLY_USED就是CURLCLOSEPOLICY_OLDEST 还存在另外三个CURLCLOSEPOLICY_ 但是cURL暂时还不支持 CURLOPT_CONNECTTIMEOUT 在发起连接前等待的时间 如果设置为 则无限等待 CURLOPT_CONNECTTIMEOUT_MS 尝试连接等待的时间 以毫秒为单位 如果设置为 则无限等待 在cURL 中被加入 从PHP 开始可用 CURLOPT_DNS_CACHE_TIMEOUT 设置在内存中保存DNS信息的时间 默认为 秒 CURLOPT_FTPSSLAUTH FTP验证方式 CURLFTPAUTH_SSL (首先尝试SSL) CURLFTPAUTH_TLS (首先尝试TLS)或CURLFTPAUTH_DEFAULT (让cURL自动决定) 在cURL 中被加入 CURLOPT_HTTP_VERSION CURL_HTTP_VERSION_NONE (默认值 让cURL自己判断使用哪个版本) CURL_HTTP_VERSION_ _ (强制使用 HTTP/ )或CURL_HTTP_VERSION_ _ (强制使用 HTTP/ ) CURLOPT_HTTPAUTH 使用的HTTP验证方法 可选的值有 CURLAUTH_BASIC CURLAUTH_DIGEST CURLAUTH_GSSNEGOTIATE CURLAUTH_NTLM CURLAUTH_ANY和CURLAUTH_ANYSAFE 可以使用|位域(或)操作符分隔多个值 cURL让服务器选择一个支持最好的值 CURLAUTH_ANY等价于CURLAUTH_BASIC | CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM CURLAUTH_ANYSAFE等价于CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM CURLOPT_INFILESIZE 设定上传文件的大小限制 字节(byte)为单位 CURLOPT_LOW_SPEED_LIMIT 当传输速度小于CURLOPT_LOW_SPEED_LIMIT时(bytes/sec) PHP会根据CURLOPT_LOW_SPEED_TIME来判断是否因太慢而取消传输 CURLOPT_LOW_SPEED_TIME 当传输速度小于CURLOPT_LOW_SPEED_LIMIT时(bytes/sec) PHP会根据CURLOPT_LOW_SPEED_TIME来判断是否因太慢而取消传输 CURLOPT_MAXCONNECTS 允许的最大连接数量 超过是会通过CURLOPT_CLOSEPOLICY决定应该停止哪些连接 CURLOPT_MAXREDIRS 指定最多的HTTP重定向的数量 这个选项是和CURLOPT_FOLLOWLOCATION一起使用的 CURLOPT_PORT 用来指定连接端口 (可选项) CURLOPT_PROTOCOLS CURLPROTO_* 的位域指 如果被启用 位域值会限定libcurl在传输过程中有哪些可使用的协议 这将允许你在编译libcurl时支持众多协议 但是限制只是用它们 中被允许使用的一个子集 默认libcurl将会使用全部它支持的协议 参见CURLOPT_REDIR_PROTOCOLS 可用的协议选项 为 CURLPROTO_HTTP CURLPROTO_HTTPS CURLPROTO_FTP CURLPROTO_FTPS CURLPROTO_SCP CURLPROTO_SFTP CURLPROTO_TELNET CURLPROTO_LDAP CURLPROTO_LDAPS CURLPROTO_DICT CURLPROTO_FILE CURLPROTO_TFTP CURLPROTO_ALL 在cURL 中被加入 CURLOPT_PROXYAUTH HTTP代理连接的验证方式 使用在CURLOPT_HTTPAUTH中的位域标志来设置相应选项 对于代理验证只有CURLAUTH_BASIC和CURLAUTH_NTLM当前被支持 在cURL 中被加入 CURLOPT_PROXYPORT 代理服务器的端口 端口也可以在CURLOPT_PROXY中进行设置 CURLOPT_PROXYTYPE 不是CURLPROXY_HTTP (默认值) 就是CURLPROXY_SOCKS 在cURL 中被加入 CURLOPT_REDIR_PROTOCOLS CURLPROTO_* 中的位域值 如果被启用 位域值将会限制传输线程在CURLOPT_FOLLOWLOCATION开启时跟随某个重定向时可使用的协议 这将使你对重定向 时限制传输线程使用被允许的协议子集默认libcurl将会允许除FILE和SCP之外的全部协议 这个和 预发布版本种无条件地跟随所有支持 的协议有一些不同 关于协议常量 请参照CURLOPT_PROTOCOLS 在cURL 中被加入 CURLOPT_RESUME_FROM 在恢复传输时传递一个字节偏移量(用来断点续传) CURLOPT_SSL_VERIFYHOST 检查服务器SSL证书中是否存在一个公用名(mon name) 译者注 公用名(Common Name)一般来讲就是填写你将要申请SSL证书的域名 (domain)或子域名(sub domain) 检查公用名是否存在 并且是否与提供的主机名匹配 CURLOPT_SSLVERSION 使用的SSL版本( 或 ) 默认情况下PHP会自己检测这个值 尽管有些情况下需要手动地进行设置 CURLOPT_TIMECONDITION 如 果在CURLOPT_TIMEVALUE指定的某个时间以后被编辑过 则使用CURL_TIMECOND_IFMODSINCE返回页面 如果没有被修改 过 并且CURLOPT_HEADER为true 则返回一个" Not Modified"的header CURLOPT_HEADER为false 则使用CURL_TIMECOND_IFUNMODSINCE 默认值为 CURL_TIMECOND_IFUNMODSINCE CURLOPT_TIMEOUT 设置cURL允许执行的最长秒数 CURLOPT_TIMEOUT_MS 设置cURL允许执行的最长毫秒数 在cURL 中被加入 从PHP 起可使用 CURLOPT_TIMEVALUE 设置一个CURLOPT_TIMECONDITION使用的时间戳 在默认状态下使用的是CURL_TIMECOND_IFMODSINCE 第三类 对于下面的这些option的可选参数 value应该被设置一个string类型的值 选项 可选value值 备注 CURLOPT_CAINFO 一个保存著 个或多个用来让服务端验证的证书的文件名 这个参数仅仅在和CURLOPT_SSL_VERIFYPEER一起使用时才有意义 CURLOPT_CAPATH 一个保存著多个CA证书的目录 这个选项是和CURLOPT_SSL_VERIFYPEER一起使用的 CURLOPT_COOKIE 设定HTTP请求中"Cookie: "部分的内容 多个cookie用分号分隔 分号后带一个空格(例如 "fruit=apple; colour=red") CURLOPT_COOKIEFILE 包含cookie数据的文件名 cookie文件的格式可以是Netscape格式 或者只是纯HTTP头部信息存入文件 CURLOPT_COOKIEJAR 连接结束后保存cookie信息的文件 CURLOPT_CUSTOMREQUEST 使 用一个自定义的请求信息来代替"GET"或"HEAD"作为HTTP请求 这对于执行"DELETE" 或者其他更隐蔽的HTTP请求 有效值如"GET" "POST" "CONNECT"等等 也就是说 不要在这里输入整个HTTP请求 例如输 入"GET /index HTTP/ rnrn"是不正确的 Note: 在确定服务器支持这个自定义请求的方法前不要使用 CURLOPT_EGDSOCKET 类似CURLOPT_RANDOM_FILE 除了一个Entropy Gathering Daemon套接字 CURLOPT_ENCODING HTTP请求头中"Accept Encoding: "的值 支持的编码有"identity" "deflate"和"gzip" 如果为空字符串"" 请求头会发送所有支持的编码类型 在cURL 中被加入 CURLOPT_FTPPORT 这个值将被用来获取供FTP"POST"指令所需要的IP地址 "POST"指令告诉远程服务器连接到我们指定的IP地址 这个字符串可以是纯文本的IP地址 主机名 一个网络接口名(UNIX下)或者只是一个 来使用默认的IP地址 CURLOPT_INTERFACE 网络发送接口名 可以是一个接口名 IP地址或者是一个主机名 CURLOPT_KRB LEVEL KRB (Kerberos ) 安全级别 下面的任何值都是有效的(从低到高的顺序) "clear" "safe" "confidential" "private" 如果字符串 和这些都不匹配 将使用"private" 这个选项设置为NULL时将禁用KRB 安全认证 目前KRB 安全认证只能用于FTP传输 CURLOPT_POSTFIELDS 全 部数据使用HTTP协议中的"POST"操作来发送 要发送文件 在文件名前面加上@前缀并使用完整路径 这个参数可以通过urlencoded后的字符 串类似 para =val ? =val 或使用一个以字段名为键值 字段数据为值的数组 如果value是一个数 组 Content Type头将会被设置成multipart/form data CURLOPT_PROXY HTTP代理通道 CURLOPT_PROXYUSERPWD 一个用来连接到代理的"[username]:[password]"格式的字符串 CURLOPT_RANDOM_FILE 一个被用来生成SSL随机数种子的文件名 CURLOPT_RANGE 以"X Y"的形式 其中X和Y都是可选项获取数据的范围 以字节计 HTTP传输线程也支持几个这样的重复项中间用逗号分隔如"X Y N M" CURLOPT_REFERER 在HTTP请求头中"Referer: "的内容 CURLOPT_SSL_CIPHER_LIST 一个SSL的加密算法列表 例如RC SHA和TLSv 都是可用的加密列表 CURLOPT_SSLCERT 一个包含PEM格式证书的文件名 CURLOPT_SSLCERTPASSWD 使用CURLOPT_SSLCERT证书需要的密码 CURLOPT_SSLCERTTYPE 证书的类型 支持的格式有"PEM" (默认值) "DER"和"ENG" 在cURL 中被加入 CURLOPT_SSLENGINE 用来在CURLOPT_SSLKEY中指定的SSL私钥的加密引擎变量 CURLOPT_SSLENGINE_DEFAULT 用来做非对称加密操作的变量 CURLOPT_SSLKEY 包含SSL私钥的文件名 CURLOPT_SSLKEYPASSWD 在CURLOPT_SSLKEY中指定了的SSL私钥的密码 Note: 由于这个选项包含了敏感的密码信息 记得保证这个PHP脚本的安全 CURLOPT_SSLKEYTYPE CURLOPT_SSLKEY中规定的私钥的加密类型 支持的密钥类型为"PEM"(默认值) "DER"和"ENG" CURLOPT_URL 需要获取的URL地址 也可以在 curl_init()函数中设置 CURLOPT_USERAGENT 在HTTP请求中包含一个"User Agent: "头的字符串 CURLOPT_USERPWD 传递一个连接中需要的用户名和密码 格式为 "[username]:[password]" 第四类 对于下面的这些option的可选参数 value应该被设置一个数组 选项 可选value值 备注 CURLOPT_HTTP ALIASES 响应码数组 数组中的响应吗被认为是正确的响应 否则被认为是错误的 在cURL 中被加入 CURLOPT_HTTPHEADER 一个用来设置HTTP头字段的数组 使用如下的形式的数组进行设置 array( Content type: text/plain Content length: ) CURLOPT_POSTQUOTE 在FTP请求执行完成后 在服务器上执行的一组FTP命令 CURLOPT_QUOTE 一组先于FTP请求的在服务器上执行的FTP命令

lishixinzhi/Article/program/PHP/201311/21090

php curl get 下载远程zip文件保存在本地例子

<?php

if($_POST['submit']){

$url=$_POST['url']; //取得提交过来的地址

$url=urldecode($url);

$fname=basename("$url"); //返回路径中的文件名部分 fetion_sms.zip

$str_name=pathinfo($fname); //以数组的形式返回文件路径的信息

$extname=strtolower($str_name['extension']); //把扩展名转换成小写

//$uptypes=explode(",",$forum_upload); //取得可以上传的文件格式

//$size=getFileSize($url);

$time=date("Ymd",time());

$upload_dir="./upload/";//上传的路径

$file_name=$time.rand(1000,9999).'.'.$fname;

$dir=$upload_dir.$file_name;//创建上传目录

//判断目录是否存在 不存在则创建

if(!file_exists($upload_dir)){

mkdir($upload_dir,0777,true);

}

$contents=curl_download($url,$dir);

if($contents){

echo "下载成功";

}else{

echo "下载失败";

}

}

function curl_download($url, $dir) {

$ch = curl_init($url);

$fp = fopen($dir, "wb");

curl_setopt($ch, CURLOPT_FILE, $fp);

curl_setopt($ch, CURLOPT_HEADER, 0);

$res=curl_exec($ch);

curl_close($ch);

fclose($fp);

return $res;

}

?>

<!DOCTYPE html>

<html lang="zh-CN">

<head>

<meta>

<meta charset="utf-8" />

<meta name="viewport" content="width=device-width, initial-scale=1">

<title>远程下载文件</title>

<form name="upform" method="post" action="" enctype='multipart/form-data'>

<input name='url' type='text' size='20'/>

<input type='submit' name='submit' value='远程下载'/>

</form>

</body>

</html>

解析php中curl

php的multi_curl功能慎用 因为某些版本的curl和php的搭配有Bug 所以你调试过没问题的代码很可能在别的机器上不正确 ?

相信许多人对php手册中语焉不详的curl_multi一族的函数头疼不已 它们文档少 给的例子 更是简单的让你无从借鉴 我也曾经找了许多网页 都没见一个完整的应用例子 ?curl_multi_add_handle ?curl_multi_close ?curl_multi_exec ?curl_multi_getcontent ?curl_multi_info_read ?curl_multi_init ?curl_multi_remove_handle ?curl_multi_select 一般来说 想到要用这些函数时 目的显然应该是要同时请求多个url 而不是一个一个依次请求 否则不如自己循环去调curl_exec好了

步骤总结如下 第一步 调用curl_multi_init 第二步 循环调用curl_multi_add_handle 这一步需要注意的是 curl_multi_add_handle的第二个参数是由curl_init而来的子handle 第三步 持续调用curl_multi_exec 第四步 根据需要循环调用curl_multi_getcontent获取结果 第五步 调用curl_multi_remove_handle 并为每个字handle调用curl_close 第六步 调用curl_multi_close 这里有一个网上找的简单例子 其作者称为dirty的例子 (稍后我会说明为何dirty)

复制代码 代码如下: * Here s a quick and dirty example for curl multi from PHP tested on PHP RC CLI / FreeBSD */

$connomains = array( " " " );

$mh = curl_multi_init();

foreach ($connomains as $i => $url) { ???? $conn[$i]=curl_init($url); ????? curl_setopt($conn[$i] CURLOPT_RETURNTRANSFER ); ????? curl_multi_add_handle ($mh $conn[$i]); }

do { $n=curl_multi_exec($mh $active); } while ($active);

foreach ($connomains as $i => $url) { ????? $res[$i]=curl_multi_getcontent($conn[$i]); ????? curl_close($conn[$i]); }

print_r($res);

整个使用过程差不多就是这样 但是 这个简单代码有个致命弱点 就是在do循环的那段 在整个url请求期间是个死循环 它会轻易导致CPU占用 % 现在我们来改进它 这里要用到一个几乎没有任何文档的函数curl_multi_select了 虽然C的curl库对select有说明 但是 php里的接口和用法确与C中有不同 把上面do的那段改成下面这样

复制代码 代码如下: do { ??????????????????????? $mrc = curl_multi_exec($mh $active); ??????????????? } while ($mrc == CURLM_CALL_MULTI_PERFORM); ??????????????? while ($active and $mrc == CURLM_OK) { ??????????????????????? if (curl_multi_select($mh) != ) { ??????????????????????????????? do { ??????????????????????????????????????? $mrc = curl_multi_exec($mh $active); ??????????????????????????????? } while ($mrc == CURLM_CALL_MULTI_PERFORM); ??????????????????????? } ??????????????? }

因 为$active要等全部url数据接受完毕才变成false 所以这里用到了curl_multi_exec的返回值判断是否还有数据 当有数据的时候 就不停调用curl_multi_exec 暂时没有数据就进入select阶段 新数据一来就可以被唤醒继续执行 这里的好处就是CPU的无谓消耗没有 了

另外 还有一些细节的地方可能有时候要遇到 控制每一个请求的超时时间 在curl_multi_add_handle之前通过curl_setopt去做 curl_setopt($ch CURLOPT_TIMEOUT $timeout);

判断是否超时了或者其他错误 在curl_multi_getcontent之前用 curl_error($conn[$i]);

lishixinzhi/Article/program/PHP/201311/21124

php curl 模拟登录并获取数据实例详解

PHP的curl()在抓取网页的效率方面是比较高的,而且支持多线程,而file_get_contents()效率就要稍低些,当然,使用curl时需要开启下curl扩展。

代码实战

先来看登录部分的代码:

//模拟登录

function

login_post($url,

$cookie,

$post)

{

$curl

=

curl_init();//初始化curl模块

curl_setopt($curl,

CURLOPT_URL,

$url);//登录提交的地址

curl_setopt($curl,

CURLOPT_HEADER,

0);//是否显示头信息

curl_setopt($curl,

CURLOPT_RETURNTRANSFER,

0);//是否自动显示返回的信息

curl_setopt($curl,

CURLOPT_COOKIEJAR,

$cookie);

//设置Cookie信息保存在指定的文件中

curl_setopt($curl,

CURLOPT_POST,

1);//post方式提交

curl_setopt($curl,

CURLOPT_POSTFIELDS,

http_build_query($post));//要提交的信息

curl_exec($curl);//执行cURL

curl_close($curl);//关闭cURL资源,并且释放系统资源

}

函数login_post()首先初始化curl_init(),然后使用curl_setopt()设置相关选项信息,包括要提交的url地址,保存的cookie文件,post的数据(用户名和密码等信息),是否返回信息等等,然后curl_exec执行curl,最后curl_close()释放资源。注意PHP自带的http_build_query()可以将数组转换成相连接的字符串。

接下来如果登录成功后,我们要获取登录成功后的页面信息。

//登录成功后获取数据

function

get_content($url,

$cookie)

{

$ch

=

curl_init();

curl_setopt($ch,

CURLOPT_URL,

$url);

curl_setopt($ch,

CURLOPT_HEADER,

0);

curl_setopt($ch,

CURLOPT_RETURNTRANSFER,

1);

curl_setopt($ch,

CURLOPT_COOKIEFILE,

$cookie);

//读取cookie

$rs

=

curl_exec($ch);

//执行cURL抓取页面内容

curl_close($ch);

return

$rs;

}

函数get_content()中也是先初始化curl,然后设置相关选项,执行curl,释放资源。其中我们设置CURLOPT_RETURNTRANSFER为1即自动返回信息,而CURLOPT_COOKIEFILE可以读取到登录时保存的cookie信息,最后将页面内容返回。

我们的最终目的是要获取到模拟登录后的信息,也就是只有正常登录成功后才能获取的有用信息。接下来我们以登录开源中国的移动版为例,看看如何抓取到登录成功后的信息。

//设置post的数据

$post

=

array

(

'email'

=>

'oschina账户',

'pwd'

=>

'oschina密码',

'goto_page'

=>

'/my',

'error_page'

=>

'/login',

'save_login'

=>

'1',

'submit'

=>

'现在登录'

);

//登录地址

$url

=

"";

//设置cookie保存路径

$cookie

=

dirname(__FILE__)

.

'/cookie_oschina.txt';

//登录后要获取信息的地址

$url2

=

"";

//模拟登录

login_post($url,

$cookie,

$post);

//获取登录页的信息

$content

=

get_content($url2,

$cookie);

//删除cookie文件

@

unlink($cookie);

//匹配页面信息

$preg

=

"/<td

class='portrait'>(.*)<\/td>/i";

preg_match_all($preg,

$content,

$arr);

$str

=

$arr[1][0];

//输出内容

echo

$str;

使用总结

1、初始化curl;

2、使用curl_setopt设置目标url,和其他选项;

3、curl_exec,执行curl;

4、执行后,关闭curl;

5、输出数据。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

关于phpcurl案例的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。

查看更多关于phpcurl案例 php的curl实例的详细内容...

声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did167548
更新时间:2023-03-28   阅读:32次

上一篇: php减少内存使用 php减少内存开销

下一篇:php數組大小 php数组排序从小到大函数

相关资讯

最新资料更新

  • 1.dedecms调用图片集中图片的注释
  • 2.dedecms删除系统自定义变量的方法
  • 3.织梦DEDECMS TAG标签按照设定的栏目id获取相应的内容
  • 4.织梦dedecms中自定义表单必填项的设置方法
  • 5.dedecms5.7使tag调用的标签正序排列的方法
  • 6.Dedecms自定义表单“数据校验不对,程序返回错误”的解决方法
  • 7.dedecms会员设置、互动设置的方法
  • 8.在自己的php页面中使用dedecms标签的代码示例
  • 9.DEDECMS在PHP5.4不能正常运行的解决方法
  • 10.dedecms子栏目中调用其顶级栏目名称和简介的方法
  • 11.dedecms模板安装教程及模板相关知识学习
  • 12.DedeCms制作谷歌xml格式网站地图的方法
  • 13.织梦dedecms首页导航栏currentstyle参数无效的替代方法
  • 14.dedecms常用sql语句汇总
  • 15.DedeCms后台登录一片空白的解决方法
  • 16.DEDE [field:global name=autoindex/] 按序号排列从0从1开始
  • 17.织梦Dedecms设置伪静态详细方法
  • 18.dedecms的sql标签中传入参数的方法
  • 19.DEDECMS 扩展标签和dede自定义标签实现方法
  • 20.dedecms当前位置导航去掉链接的实现方法

CopyRight:2016-2025好得很程序员自学网 备案ICP:湘ICP备09009000号-16 http://haodehen.cn
本站资讯不构成任何建议,仅限于个人分享,参考须谨慎!
本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。

网站内容来源于网络分享,如有侵权发邮箱到:kenbest@126.com,收到邮件我们会即时下线处理。
网站框架支持:HDHCMS   51LA统计 百度统计
Copyright © 2018-2025 「好得很程序员自学网」
[ SiteMap ]