基于PHP CURL获取邮箱地址的详解
程序员文章站
2022-05-21 17:20:05
curl可谓居家旅行必备之杀人良药,为何如此形容?就是因为他好用方便能实现页面抓取模拟登录采集等一系列功能。记得第一次接触curl的时候是要实现完成从邮箱用户列表的抓取。当...
curl可谓居家旅行必备之杀人良药,为何如此形容?就是因为他好用方便能实现页面抓取模拟登录采集等一系列功能。
记得第一次接触curl的时候是要实现完成从邮箱用户列表的抓取。当时为了赶进度没有细细研究只是网上找了一些资料实现了功能。现在把当初的代码整理一下功能依旧能用
<?php
error_reporting ( 0 );
set_time_limit ( 0 );
header ( "content-type: text/html; charset=gb2312" );
//邮箱用户名密码
$user = 'username';
$pass = 'password';
//创建一个文件用于存放cookie信息
define ( "cookiejar", tempnam ( ini_get ( "upload_tmp_dir" ), "cookie" ) );
$url = 'http://reg.163.com/logins.jsp?type=1&url=http://entry.mail.163.com/coremail/fcg/ntesdoor2?lightweight%3d1%26verifycookie%3d1%26language%3d-1%26style%3d-1';
$refer = 'http://mail.163.com';
$fields_post = array ('username' => $user, 'password' => $pass, 'verifycookie' => 1, 'style' => - 1, 'product' => 'mail163', 'seltype' => - 1, 'secure' => 'on' );
$fields_string = http_build_query ( $fields_post, '&' );
$headers_login = array ('user-agent' => 'mozilla/5.0 (windows; u; windows nt 5.1; zh-cn; rv:1.9) gecko/2008052906 firefox/3.0', 'referer' => 'http://www.163.com' );
//登录
$ch = curl_init ( $url );
curl_setopt ( $ch, curlopt_returntransfer, true );
curl_setopt ( $ch, curlopt_header, true );
curl_setopt ( $ch, curlopt_connecttimeout, 120 );
curl_setopt ( $ch, curlopt_post, true );
curl_setopt ( $ch, curlopt_referer, $refer );
curl_setopt ( $ch, curlopt_cookiesession, true );
curl_setopt ( $ch, curlopt_cookiejar, cookiejar );
curl_setopt ( $ch, curlopt_httpheader, $headers_login );
curl_setopt ( $ch, curlopt_post, count ( $fields ) );
curl_setopt ( $ch, curlopt_postfields, $fields_string );
$result = curl_exec ( $ch );
curl_close ( $ch );
//跳转
$url = 'http://entry.mail.163.com/coremail/fcg/ntesdoor2?lightweight=1&verifycookie=1&language=-1&style=-1&username=loki_wuxi';
$headers = array ('user-agent' => 'mozilla/5.0 (windows; u; windows nt 5.1; zh-cn; rv:1.9) gecko/2008052906 firefox/3.0' );
$ch = curl_init ( $url );
curl_setopt ( $ch, curlopt_returntransfer, true );
curl_setopt ( $ch, curlopt_header, true );
curl_setopt ( $ch, curlopt_connecttimeout, 120 );
curl_setopt ( $ch, curlopt_post, true );
curl_setopt ( $ch, curlopt_httpheader, $headers );
curl_setopt ( $ch, curlopt_cookiefile, cookiejar );
curl_setopt ( $ch, curlopt_cookiejar, cookiejar );
$result = curl_exec ( $ch );
curl_close ( $ch );
//取得sid
preg_match ( '/sid=[^\"].*/', $result, $location );
$sid = substr ( $location [0], 4, - 1 );
//通讯录地址
$url = 'http://g4a30.mail.163.com/jy3/address/addrlist.jsp?sid=' . $sid . '&gid=all';
$headers = array ('user-agent' => 'mozilla/5.0 (windows; u; windows nt 5.1; zh-cn; rv:1.9) gecko/2008052906 firefox/3.0' );
$ch = curl_init ( $url );
curl_setopt ( $ch, curlopt_returntransfer, true );
curl_setopt ( $ch, curlopt_header, true );
curl_setopt ( $ch, curlopt_connecttimeout, 120 );
curl_setopt ( $ch, curlopt_post, true );
curl_setopt ( $ch, curlopt_httpheader, $headers );
curl_setopt ( $ch, curlopt_cookiefile, cookiejar );
curl_setopt ( $ch, curlopt_cookiejar, cookiejar );
$result = curl_exec ( $ch );
curl_close ( $ch );
unlink ( cookiejar );
//开始抓取内容
preg_match_all ( '/<td class="ibx_td_addrname"><a[^>]*>(.*?)<\/a><\/td><td class="ibx_td_addremail"><a[^>]*>(.*?)<\/a><\/td>/i', $result, $infos, preg_set_order );
//1:姓名2:邮箱
print_r ( $infos );
?>
建立一个php文件复制以上代码保存后效果立竿见影,记得更改邮箱账户和密码,账户不需要@后缀。curl初体验,如何,还不错吧。
后来在csdn上又看到别人发帖问一个获取快递查询的问题,他想把一些大的快递公司查询业务做在一个页面中,的确是个很不错的实用小工具,但是因为快递查询有验证码,不由的又让我想起了curl利器。后来帮帖主实现功能,思路很简单,先用curl模拟抓取验证码,然后显示到用户提交页面中,同时保存验证码的cookie等用户查询一起提交就保证了cookie的同步。
源代码如下:
-getems.html
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<title>ems快递查询</title>
</head>
<body>
<?php
fclose(fopen('cookie.txt','w')); //文件 cookie.txt 用于存放取得的cookie
$cookiejar = realpath('cookie.txt');
$fp = fopen("example_homepage.txt", "w"); //文件 example_homepage.txt 用于存放取得的页面内容
$ch = curl_init("http://www.ems.com.cn/servlet/imagecaptchaservlet");
curl_setopt($ch, curlopt_file, $fp);
curl_setopt($ch, curlopt_cookiesession, 1);
curl_setopt($ch, curlopt_cookiejar, $cookiejar);
curl_setopt($ch, curlopt_cookiefile, $cookiejar);
curl_setopt($ch, curlopt_header, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);
//readfile($cookiejar); //查看取到的 cookie
//readfile("example_homepage.jpg"); //查看取到的图片
?>
<form action="getems.php" method="post" name="form1">
快递号:<input name="mailnum" type="text" value="ea739701017cs" />(13位 首尾2位都是字母)
<input name="code" type="text" value="" />
<?php echo "<img src='example_homepage.txt'>";?>
<input type="submit" value="提交">
</form>
</body>
</html>
-getems.php
<?php
if($_post){
//使用先前验证码的cookie文件
$cookiejar = realpath('cookie.txt');
//获取myemsbarcode号 和验证码变量名
$ch = curl_init("http://www.ems.com.cn");
curl_setopt($ch, curlopt_returntransfer, true);
curl_setopt($ch, curlopt_header, 0);
curl_setopt($ch, curlopt_cookiefile, $cookiejar);
curl_setopt($ch, curlopt_cookiejar, $cookiejar);
$result = curl_exec($ch);
curl_close($ch);
preg_match("/<input type=\"hidden\" name=\"myemsbarcode\" value=\"(.*)\"\/>/isu",$result,$myemsbarcode);
preg_match("/<\/span><input name=\"(.*)\" type=\"text\"/isu",$result,$codename);
$parm = array($codename[1]=>$_post['code'],
mailnum =>$_post['mailnum'],
myemsbarcode=>$myemsbarcode[1],
reqcode=>'browsebase'
);
$ch = curl_init("http://www.ems.com.cn/qcgzoutqueryaction.do");
curl_setopt($ch, curlopt_returntransfer, 1);
curl_setopt($ch, curlopt_header, 0);
curl_setopt($ch, curlopt_cookiefile, $cookiejar);
curl_setopt($ch, curlopt_cookiejar, $cookiejar);
curl_setopt($ch, curlopt_post, 1);
curl_setopt($ch, curlopt_referer, "http://www.ems.com.cn");
curl_setopt($ch, curlopt_postfields, http_build_query($parm));
$_source = curl_exec($ch);
curl_close($ch);
//搞定
var_dump($_source);
exit;
}
?>
对于curl库的参数详解,网上有很多我直接收录了
函数列表curl库一共有17个函数:
curl_close:关闭curl会话
curl_copy_handle:复制一个curl会话句柄,同时3复制其所有参数
curl_errno:返回最后一个错误码
curl_error:返回一个字符串,用以描述当前会话的最后一个错误
curl_exec:执行当前会话
curl_getinfo:获取特定信息
curl_init:初始化curl会话
curl_multi_add_handle:在一个多连接会话中添加一个句柄
curl_multi_close:关闭一个多句柄crul会话
curl_multi_exec:执行一个多句柄curl会话
curl_multi_getcontent:返回一个句柄执行后的内容,如果设置了curlopt_returntransfer
curl_multi_info_read:获取当前所有连接的信息
curl_multi_init:初始化一个多句柄会话
curl_multi_remove_handle:从一个多句柄会话中删除一个句柄
curl_multi_select:获取所有绑定的套接字
curl_setopt:设置curl传输选项
curl_version:获取curl版本
常用设置选项布尔值选项
curlopt_autoreferer:当返回的信息头含有转向信息时,自动设置前向连接
curlopt_binarytransfer:truetoreturntherawoutputwhencurlopt_returntransferisused.
curlopt_cookiesession:标志为新的cookie会话,忽略之前设置的cookie会话
curlopt_crlf:将unix系统的换行符转换为dos换行符
curlopt_dns_use_global_cache:使用全局的dns缓存
curlopt_failonerror:忽略返回错误
curlopt_filetime:获取请求文档的修改日期,该日期可以用curl_getinfo()获取。
curlopt_followlocation:紧随服务器返回的所有重定向信息
curlopt_forbid_reuse:当进程处理完毕后强制关闭会话,不再缓存供重用
curlopt_fresh_connect:强制建立一个新的会话,而不是重用缓存的会话
curlopt_header:在返回的输出中包含响应头信息
curlopt_httpget:设置http请求方式为get
curlopt_httpproxytunnel:经由一个http代理建立连接
curlopt_nobody:返回的输出中不包含文档信息.
curlopt_noprogress:禁止进程级别传输,php自动设为真
curlopt_nosignal:忽略所有发往php的信息
curlopt_post:设置post方式提交数据,post格式为application/x-www-form-urlencoded
curlopt_puttrue:设置put方式上传文件,同时设置curlopt_infile和curlopt_infilesize
curlopt_returntransfer:返回字符串,而不是调用curl_exec()后直接输出
curlopt_ssl_verifypeer:ssl验证开启
curlopt_unrestricted_auth:一直链接后面附加用户名和密码,同时设置curlopt_followlocation
curlopt_upload:准备上传整数值选项
curlopt_buffersize:缓存大小
curlopt_connecttimeout:连接时间设置,默认0为无限制
curlopt_dns_cache_timeout:内存中保存dns信息的时间,默认2分钟
curlopt_infilesize:上传至远程站点的文件尺寸
curlopt_low_speed_limit:传输最低速度限制andabort.
curlopt_low_speed_time:传输时间限制
curlopt_maxconnects:最大持久连接数
curlopt_maxredirs:最大转向数
curlopt_port:连接端口
curlopt_proxyauth:*****验证方式
curlopt_proxyport:*****端口
curlopt_proxytype:*****类型
curlopt_timeout:curl函数的最大执行时间字符串选项
curlopt_cookie:http头中set-cookie中的cookie信息
curlopt_cookiefile:包含cookie信息的文件,cookie文件的格式可以是netscape格式,或者只是http头的格式
curlopt_cookiejar:连接结束后保存cookie信息的文件
curlopt_customrequest:自定义请求头,使用相对地址
curlopt_encoding:http请求头中accept-encoding的值
curlopt_postfields:post格式提交的数据内容
curlopt_proxy:代理通道
curlopt_proxyuserpwd:代理认证用户名和密码
curlopt_range:返回数据的范围,以字节记
curlopt_referer:前向链接
curlopt_url:要连接的url地址,可以在curl_init()中设置
curlopt_useragent:http头中user-agent的值
curlopt_userpwd:连接种使用的验证信息数组选项
curlopt_http200aliases:200响应码数组,数组中的响应吗被认为是正确的响应
curlopt_httpheader:自定义请求头信息只能是流句柄的选项:
curlopt_file:传输要写入的晚间句柄,默认是标准输出
curlopt_infile:传输要读取的文件句柄
curlopt_stderr:作为标准错误输出的一个替换选项
curlopt_writeheader:传输头信息要写入的文件回调函数选项
curlopt_headerfunction:拥有两个参数的回调函数,第一个是参数是会话句柄,第二是http响应头信息的字符串。使用此回调函数,将自行处理响应头信息。响应头信息按行返回。设置返回值为字符串长度。
curlopt_readfunction:拥有两个参数的回调函数,第一个是参数是会话句柄,第二是http响应头信息的字符串。使用此函数,将自行处理返回的数据。返回值为数据尺寸。
curlopt_writefunction:拥有两个参数的回调函数,第一个是参数是会话句柄,第二是http响应头信息的字符串。使用此回调函数,将自行处理响应头信息。响应头信息是整个字符串。设置返回值为字符串长度。
其他一些curl的例子 (摘自网络)
/*
*判断一个url是否为有效链接
*/
function isrealurl($url){
$ch = curl_init();
$options = array(
curlopt_url => $url,
curlopt_header => true,
curlopt_returntransfer => true,
curlopt_nobody => true
);
curl_setopt_array($ch, $options);
curl_exec($ch);
if(!curl_errno($ch)){
return 200==curl_getinfo($ch,curlinfo_http_code)?true:false;
}
curl_close($ch);
}
$url = 'http://testpic1.tomoimg.cn/240x180/394/855/517932781/200901/12312215602409.jpg';
if(isrealurl($url)){echo 'yes';}else{echo 'no';}
/异步请求的例子:
$userid = 517932781;
$imageid = 1520;
$albumid = 2637;
$tags = 'aa';
extract($_post);
$url = 'http://'.$_server['http_host'].'/ajax/image.php';
$fields = array(
'userid' => $userid,
'imageid' => $imageid,
'albumid' => $albumid,
'tags' => $tags,
'optype' => 'del'
);
$ch = curl_init() ;
curl_setopt($ch, curlopt_url,$url) ;
curl_setopt($ch, curlopt_post,true) ;
curl_setopt($ch, curlopt_postfields,$fields) ;
$result = curl_exec($ch) ;
curl_close($ch) ;
//上传文件
$ch = curl_init();
curl_setopt($ch,curlopt_url,'http://lh.tom.com/deal/import.php');
$fields = array(
'tname' => '道德经',
'country' => 1,
'author' => '老子',
'tags' => '道德经',
'desc' => '道可道,非常道。名可名,非常名。无名天地之始。有名万物之母。故常无欲以观其妙。常有欲以观其徼。此两者同出而异名,同谓之玄。玄之又玄,众妙之门。',
'volume' => 2,
'cover' => '@'.realpath('/data/lianhuanhua/deal/1.jpg')
);
curl_setopt($ch, curlopt_post, true) ;
curl_setopt($ch, curlopt_postfields, $fields) ;
curl_setopt($ch, curlopt_returntransfer, false);
$result = curl_exec($ch);
curl_close($ch);
//多文件上传
$ch = curl_init();
curl_setopt($ch,curlopt_url,'http://lh.tom.com/deal/addpic.php');
$j = 0;
$fields = array(
'vid' => 103,
'upfile['.$j++.']' => '@'.realpath('/data/lianhuanhua/deal/1.jpg'),
'upfile['.$j++.']' => '@'.realpath('/data/lianhuanhua/deal/2.jpg')
);
curl_setopt($ch, curlopt_post, true) ;
curl_setopt($ch, curlopt_postfields, $fields) ;
curl_setopt($ch, curlopt_returntransfer, false);
$result = curl_exec($ch);
curl_close($ch);
当你掌握了php curl库你就能做很多你想做的事情了,呵呵,前不久玩开心网的x世界,战斗实在繁琐,我直接写了个战斗助手非常好用,本代码就不开源了 :)掌握原理一样开源实现。
网站计数器
记得第一次接触curl的时候是要实现完成从邮箱用户列表的抓取。当时为了赶进度没有细细研究只是网上找了一些资料实现了功能。现在把当初的代码整理一下功能依旧能用
复制代码 代码如下:
<?php
error_reporting ( 0 );
set_time_limit ( 0 );
header ( "content-type: text/html; charset=gb2312" );
//邮箱用户名密码
$user = 'username';
$pass = 'password';
//创建一个文件用于存放cookie信息
define ( "cookiejar", tempnam ( ini_get ( "upload_tmp_dir" ), "cookie" ) );
$url = 'http://reg.163.com/logins.jsp?type=1&url=http://entry.mail.163.com/coremail/fcg/ntesdoor2?lightweight%3d1%26verifycookie%3d1%26language%3d-1%26style%3d-1';
$refer = 'http://mail.163.com';
$fields_post = array ('username' => $user, 'password' => $pass, 'verifycookie' => 1, 'style' => - 1, 'product' => 'mail163', 'seltype' => - 1, 'secure' => 'on' );
$fields_string = http_build_query ( $fields_post, '&' );
$headers_login = array ('user-agent' => 'mozilla/5.0 (windows; u; windows nt 5.1; zh-cn; rv:1.9) gecko/2008052906 firefox/3.0', 'referer' => 'http://www.163.com' );
//登录
$ch = curl_init ( $url );
curl_setopt ( $ch, curlopt_returntransfer, true );
curl_setopt ( $ch, curlopt_header, true );
curl_setopt ( $ch, curlopt_connecttimeout, 120 );
curl_setopt ( $ch, curlopt_post, true );
curl_setopt ( $ch, curlopt_referer, $refer );
curl_setopt ( $ch, curlopt_cookiesession, true );
curl_setopt ( $ch, curlopt_cookiejar, cookiejar );
curl_setopt ( $ch, curlopt_httpheader, $headers_login );
curl_setopt ( $ch, curlopt_post, count ( $fields ) );
curl_setopt ( $ch, curlopt_postfields, $fields_string );
$result = curl_exec ( $ch );
curl_close ( $ch );
//跳转
$url = 'http://entry.mail.163.com/coremail/fcg/ntesdoor2?lightweight=1&verifycookie=1&language=-1&style=-1&username=loki_wuxi';
$headers = array ('user-agent' => 'mozilla/5.0 (windows; u; windows nt 5.1; zh-cn; rv:1.9) gecko/2008052906 firefox/3.0' );
$ch = curl_init ( $url );
curl_setopt ( $ch, curlopt_returntransfer, true );
curl_setopt ( $ch, curlopt_header, true );
curl_setopt ( $ch, curlopt_connecttimeout, 120 );
curl_setopt ( $ch, curlopt_post, true );
curl_setopt ( $ch, curlopt_httpheader, $headers );
curl_setopt ( $ch, curlopt_cookiefile, cookiejar );
curl_setopt ( $ch, curlopt_cookiejar, cookiejar );
$result = curl_exec ( $ch );
curl_close ( $ch );
//取得sid
preg_match ( '/sid=[^\"].*/', $result, $location );
$sid = substr ( $location [0], 4, - 1 );
//通讯录地址
$url = 'http://g4a30.mail.163.com/jy3/address/addrlist.jsp?sid=' . $sid . '&gid=all';
$headers = array ('user-agent' => 'mozilla/5.0 (windows; u; windows nt 5.1; zh-cn; rv:1.9) gecko/2008052906 firefox/3.0' );
$ch = curl_init ( $url );
curl_setopt ( $ch, curlopt_returntransfer, true );
curl_setopt ( $ch, curlopt_header, true );
curl_setopt ( $ch, curlopt_connecttimeout, 120 );
curl_setopt ( $ch, curlopt_post, true );
curl_setopt ( $ch, curlopt_httpheader, $headers );
curl_setopt ( $ch, curlopt_cookiefile, cookiejar );
curl_setopt ( $ch, curlopt_cookiejar, cookiejar );
$result = curl_exec ( $ch );
curl_close ( $ch );
unlink ( cookiejar );
//开始抓取内容
preg_match_all ( '/<td class="ibx_td_addrname"><a[^>]*>(.*?)<\/a><\/td><td class="ibx_td_addremail"><a[^>]*>(.*?)<\/a><\/td>/i', $result, $infos, preg_set_order );
//1:姓名2:邮箱
print_r ( $infos );
?>
建立一个php文件复制以上代码保存后效果立竿见影,记得更改邮箱账户和密码,账户不需要@后缀。curl初体验,如何,还不错吧。
后来在csdn上又看到别人发帖问一个获取快递查询的问题,他想把一些大的快递公司查询业务做在一个页面中,的确是个很不错的实用小工具,但是因为快递查询有验证码,不由的又让我想起了curl利器。后来帮帖主实现功能,思路很简单,先用curl模拟抓取验证码,然后显示到用户提交页面中,同时保存验证码的cookie等用户查询一起提交就保证了cookie的同步。
源代码如下:
-getems.html
复制代码 代码如下:
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<title>ems快递查询</title>
</head>
<body>
<?php
fclose(fopen('cookie.txt','w')); //文件 cookie.txt 用于存放取得的cookie
$cookiejar = realpath('cookie.txt');
$fp = fopen("example_homepage.txt", "w"); //文件 example_homepage.txt 用于存放取得的页面内容
$ch = curl_init("http://www.ems.com.cn/servlet/imagecaptchaservlet");
curl_setopt($ch, curlopt_file, $fp);
curl_setopt($ch, curlopt_cookiesession, 1);
curl_setopt($ch, curlopt_cookiejar, $cookiejar);
curl_setopt($ch, curlopt_cookiefile, $cookiejar);
curl_setopt($ch, curlopt_header, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);
//readfile($cookiejar); //查看取到的 cookie
//readfile("example_homepage.jpg"); //查看取到的图片
?>
<form action="getems.php" method="post" name="form1">
快递号:<input name="mailnum" type="text" value="ea739701017cs" />(13位 首尾2位都是字母)
<input name="code" type="text" value="" />
<?php echo "<img src='example_homepage.txt'>";?>
<input type="submit" value="提交">
</form>
</body>
</html>
-getems.php
复制代码 代码如下:
<?php
if($_post){
//使用先前验证码的cookie文件
$cookiejar = realpath('cookie.txt');
//获取myemsbarcode号 和验证码变量名
$ch = curl_init("http://www.ems.com.cn");
curl_setopt($ch, curlopt_returntransfer, true);
curl_setopt($ch, curlopt_header, 0);
curl_setopt($ch, curlopt_cookiefile, $cookiejar);
curl_setopt($ch, curlopt_cookiejar, $cookiejar);
$result = curl_exec($ch);
curl_close($ch);
preg_match("/<input type=\"hidden\" name=\"myemsbarcode\" value=\"(.*)\"\/>/isu",$result,$myemsbarcode);
preg_match("/<\/span><input name=\"(.*)\" type=\"text\"/isu",$result,$codename);
$parm = array($codename[1]=>$_post['code'],
mailnum =>$_post['mailnum'],
myemsbarcode=>$myemsbarcode[1],
reqcode=>'browsebase'
);
$ch = curl_init("http://www.ems.com.cn/qcgzoutqueryaction.do");
curl_setopt($ch, curlopt_returntransfer, 1);
curl_setopt($ch, curlopt_header, 0);
curl_setopt($ch, curlopt_cookiefile, $cookiejar);
curl_setopt($ch, curlopt_cookiejar, $cookiejar);
curl_setopt($ch, curlopt_post, 1);
curl_setopt($ch, curlopt_referer, "http://www.ems.com.cn");
curl_setopt($ch, curlopt_postfields, http_build_query($parm));
$_source = curl_exec($ch);
curl_close($ch);
//搞定
var_dump($_source);
exit;
}
?>
对于curl库的参数详解,网上有很多我直接收录了
函数列表curl库一共有17个函数:
curl_close:关闭curl会话
curl_copy_handle:复制一个curl会话句柄,同时3复制其所有参数
curl_errno:返回最后一个错误码
curl_error:返回一个字符串,用以描述当前会话的最后一个错误
curl_exec:执行当前会话
curl_getinfo:获取特定信息
curl_init:初始化curl会话
curl_multi_add_handle:在一个多连接会话中添加一个句柄
curl_multi_close:关闭一个多句柄crul会话
curl_multi_exec:执行一个多句柄curl会话
curl_multi_getcontent:返回一个句柄执行后的内容,如果设置了curlopt_returntransfer
curl_multi_info_read:获取当前所有连接的信息
curl_multi_init:初始化一个多句柄会话
curl_multi_remove_handle:从一个多句柄会话中删除一个句柄
curl_multi_select:获取所有绑定的套接字
curl_setopt:设置curl传输选项
curl_version:获取curl版本
常用设置选项布尔值选项
curlopt_autoreferer:当返回的信息头含有转向信息时,自动设置前向连接
curlopt_binarytransfer:truetoreturntherawoutputwhencurlopt_returntransferisused.
curlopt_cookiesession:标志为新的cookie会话,忽略之前设置的cookie会话
curlopt_crlf:将unix系统的换行符转换为dos换行符
curlopt_dns_use_global_cache:使用全局的dns缓存
curlopt_failonerror:忽略返回错误
curlopt_filetime:获取请求文档的修改日期,该日期可以用curl_getinfo()获取。
curlopt_followlocation:紧随服务器返回的所有重定向信息
curlopt_forbid_reuse:当进程处理完毕后强制关闭会话,不再缓存供重用
curlopt_fresh_connect:强制建立一个新的会话,而不是重用缓存的会话
curlopt_header:在返回的输出中包含响应头信息
curlopt_httpget:设置http请求方式为get
curlopt_httpproxytunnel:经由一个http代理建立连接
curlopt_nobody:返回的输出中不包含文档信息.
curlopt_noprogress:禁止进程级别传输,php自动设为真
curlopt_nosignal:忽略所有发往php的信息
curlopt_post:设置post方式提交数据,post格式为application/x-www-form-urlencoded
curlopt_puttrue:设置put方式上传文件,同时设置curlopt_infile和curlopt_infilesize
curlopt_returntransfer:返回字符串,而不是调用curl_exec()后直接输出
curlopt_ssl_verifypeer:ssl验证开启
curlopt_unrestricted_auth:一直链接后面附加用户名和密码,同时设置curlopt_followlocation
curlopt_upload:准备上传整数值选项
curlopt_buffersize:缓存大小
curlopt_connecttimeout:连接时间设置,默认0为无限制
curlopt_dns_cache_timeout:内存中保存dns信息的时间,默认2分钟
curlopt_infilesize:上传至远程站点的文件尺寸
curlopt_low_speed_limit:传输最低速度限制andabort.
curlopt_low_speed_time:传输时间限制
curlopt_maxconnects:最大持久连接数
curlopt_maxredirs:最大转向数
curlopt_port:连接端口
curlopt_proxyauth:*****验证方式
curlopt_proxyport:*****端口
curlopt_proxytype:*****类型
curlopt_timeout:curl函数的最大执行时间字符串选项
curlopt_cookie:http头中set-cookie中的cookie信息
curlopt_cookiefile:包含cookie信息的文件,cookie文件的格式可以是netscape格式,或者只是http头的格式
curlopt_cookiejar:连接结束后保存cookie信息的文件
curlopt_customrequest:自定义请求头,使用相对地址
curlopt_encoding:http请求头中accept-encoding的值
curlopt_postfields:post格式提交的数据内容
curlopt_proxy:代理通道
curlopt_proxyuserpwd:代理认证用户名和密码
curlopt_range:返回数据的范围,以字节记
curlopt_referer:前向链接
curlopt_url:要连接的url地址,可以在curl_init()中设置
curlopt_useragent:http头中user-agent的值
curlopt_userpwd:连接种使用的验证信息数组选项
curlopt_http200aliases:200响应码数组,数组中的响应吗被认为是正确的响应
curlopt_httpheader:自定义请求头信息只能是流句柄的选项:
curlopt_file:传输要写入的晚间句柄,默认是标准输出
curlopt_infile:传输要读取的文件句柄
curlopt_stderr:作为标准错误输出的一个替换选项
curlopt_writeheader:传输头信息要写入的文件回调函数选项
curlopt_headerfunction:拥有两个参数的回调函数,第一个是参数是会话句柄,第二是http响应头信息的字符串。使用此回调函数,将自行处理响应头信息。响应头信息按行返回。设置返回值为字符串长度。
curlopt_readfunction:拥有两个参数的回调函数,第一个是参数是会话句柄,第二是http响应头信息的字符串。使用此函数,将自行处理返回的数据。返回值为数据尺寸。
curlopt_writefunction:拥有两个参数的回调函数,第一个是参数是会话句柄,第二是http响应头信息的字符串。使用此回调函数,将自行处理响应头信息。响应头信息是整个字符串。设置返回值为字符串长度。
其他一些curl的例子 (摘自网络)
复制代码 代码如下:
/*
*判断一个url是否为有效链接
*/
function isrealurl($url){
$ch = curl_init();
$options = array(
curlopt_url => $url,
curlopt_header => true,
curlopt_returntransfer => true,
curlopt_nobody => true
);
curl_setopt_array($ch, $options);
curl_exec($ch);
if(!curl_errno($ch)){
return 200==curl_getinfo($ch,curlinfo_http_code)?true:false;
}
curl_close($ch);
}
$url = 'http://testpic1.tomoimg.cn/240x180/394/855/517932781/200901/12312215602409.jpg';
if(isrealurl($url)){echo 'yes';}else{echo 'no';}
/异步请求的例子:
$userid = 517932781;
$imageid = 1520;
$albumid = 2637;
$tags = 'aa';
extract($_post);
$url = 'http://'.$_server['http_host'].'/ajax/image.php';
$fields = array(
'userid' => $userid,
'imageid' => $imageid,
'albumid' => $albumid,
'tags' => $tags,
'optype' => 'del'
);
$ch = curl_init() ;
curl_setopt($ch, curlopt_url,$url) ;
curl_setopt($ch, curlopt_post,true) ;
curl_setopt($ch, curlopt_postfields,$fields) ;
$result = curl_exec($ch) ;
curl_close($ch) ;
//上传文件
$ch = curl_init();
curl_setopt($ch,curlopt_url,'http://lh.tom.com/deal/import.php');
$fields = array(
'tname' => '道德经',
'country' => 1,
'author' => '老子',
'tags' => '道德经',
'desc' => '道可道,非常道。名可名,非常名。无名天地之始。有名万物之母。故常无欲以观其妙。常有欲以观其徼。此两者同出而异名,同谓之玄。玄之又玄,众妙之门。',
'volume' => 2,
'cover' => '@'.realpath('/data/lianhuanhua/deal/1.jpg')
);
curl_setopt($ch, curlopt_post, true) ;
curl_setopt($ch, curlopt_postfields, $fields) ;
curl_setopt($ch, curlopt_returntransfer, false);
$result = curl_exec($ch);
curl_close($ch);
//多文件上传
$ch = curl_init();
curl_setopt($ch,curlopt_url,'http://lh.tom.com/deal/addpic.php');
$j = 0;
$fields = array(
'vid' => 103,
'upfile['.$j++.']' => '@'.realpath('/data/lianhuanhua/deal/1.jpg'),
'upfile['.$j++.']' => '@'.realpath('/data/lianhuanhua/deal/2.jpg')
);
curl_setopt($ch, curlopt_post, true) ;
curl_setopt($ch, curlopt_postfields, $fields) ;
curl_setopt($ch, curlopt_returntransfer, false);
$result = curl_exec($ch);
curl_close($ch);
当你掌握了php curl库你就能做很多你想做的事情了,呵呵,前不久玩开心网的x世界,战斗实在繁琐,我直接写了个战斗助手非常好用,本代码就不开源了 :)掌握原理一样开源实现。
网站计数器
上一篇: 莫名的失望