PHP的curl实现get,post和cookie(实例介绍)


Posted in PHP onJune 17, 2013

类似于dreamhost这类主机服务商,是显示fopen的使用 的。使用php的curl可以实现支持FTP、FTPS、HTTP HTPPS SCP SFTP TFTP TELNET DICT FILE和LDAP。curl 支持SSL证书、HTTP POST、HTTP PUT 、FTP 上传,kerberos、基于HTT格式的上传、代理、cookie、用户+口令证明、文件传送恢复、http代理通道就最常用的来说,是基于http的 get和post方法。
代码实现:
1、http的get实现

$ch = curl_init("http://www.domain.com/api/index.php?test=1") ;  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 获取数据返回  
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true) ; // 在启用 CURLOPT_RETURNTRANSFER 时候将获取数据返回  
echo $output = curl_exec($ch) ;  /* 写入文件 */  
$fh = fopen("out.html", 'w') ;  
fwrite($fh, $output) ;  
fclose($fh) ;  

2、http的post实现
<?php  
$url = 'http://www.domain.com/api/' ;  
$fields = array(  
               'lname'=>'justcoding' ,  
               'fname'=>'phplover' ,  
               'title'=>'myapi',  
               'age'=>'27' ,  
               'email'=>'1353777303@gmail.com' ,  
               'phone'=>'1353777303'  
              );  
//$post_data = implode('&',$fields);  
注意:post请求的参数要用get方式那样连接起来,作为字符串传递:
如:$params = 'userId='.$this->user_id.'&auth='.$this->auth.'&sig='.$this->sig
还有跨平台的请求,curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转 (很重要)
//open connection  
$ch = curl_init() ;  
//set the url, number of POST vars, POST data  
curl_setopt($ch, CURLOPT_URL,$url) ;  
curl_setopt($ch, CURLOPT_POST,count($fields)) ; // 启用时会发送一个常规的POST请求,类型为:application/x-www-form-urlencoded,就像表单提交的一样。  
curl_setopt($ch, CURLOPT_POSTFIELDS,$fields); // 在HTTP中的“POST”操作。如果要传送一个文件,需要一个@开头的文件名  
ob_start();  
curl_exec($ch);  
$result = ob_get_contents() ;  
ob_end_clean();  
echo $result;  
//close connection  
curl_close($ch) ; 

<?php  if($_GET['test'])  
{  
     print_r($_GET);  
}  
if($_POST)  
{  
    print_r($_POST);  
}  

php的curl传送cookie
 
两种方式:
一种是自动:
curl_setopt($curlHandle, CURLOPT_COOKIEJAR, 'cookie.txt '); //保存  
curl_setopt($curlHandle, CURLOPT_COOKIEFILE, 'cookie.txt '); //读取 

这样COOKIE会自动跟上去.
不过要分两次,一是先访问产生cookie,接着连结才能用cookie
例子:
<?php     function get_curlcuconent2($filename,$referer)  
{  
   $cookie_jar = tempnam('./tmp','JSESSIONID');  
   $ch = curl_init();  
   curl_setopt($ch, CURLOPT_URL, $filename);  
   curl_setopt($ch, CURLOPT_HEADER, false);  
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
   //设置文件读取并提交的cookie路径  
   curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar);  
   $filecontent=curl_exec($ch);  
   curl_close($ch);  
   $ch = curl_init();  
   $hostname ="www.domain.com";  
   //$referer="http://www.domain.com/";  
   curl_setopt($ch, CURLOPT_URL, $filename);  
   curl_setopt($ch, CURLOPT_REFERER, $referer); // 看这里,你也可以说你从google来  
   curl_setopt($ch, CURLOPT_USERAGENT, "www.domain.com");  
   //$request = "JSESSIONID=abc6szw15ozvZ_PU9b-8r"; //设置POST参数  
   //curl_setopt($ch, CURLOPT_POSTFIELDS, $request);     
   // 上面这句,当然你可以说你是baidu,改掉这里的值就ok了,可以实现小偷的功能,$_SERVER['HTTP_USER_AGENT']  
   //你也可以自己做个 spider 了,那么就伪装这里的 CURLOPT_USERAGENT 吧  
   //如果你要把这个程序放到linux上用php -q执行那也要写出具体的$_SERVER['HTTP_USER_AGENT'],伪造的也可以  
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
   curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_jar);  
   curl_setopt($ch, CURLOPT_HEADER, false);//设定是否输出页面内容  
   curl_setopt($ch, CURLOPT_GET, 1); // post,get 过去  
   $filecontent = curl_exec($ch);  
   preg_match_all("/charset=(.+?)[NULL\"\']/is",$filecontent, $charsetarray);  
   if(strtolower($charsetarray[1][0])=="utf-8")  
         $filecontent=iconv( 'utf-8', 'gb18030//IGNORE' , $filecontent);  
   curl_close($ch);  
   return $filecontent;  
}  
?> 

一种自定义:
$header[]= 'Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, text/html, * '. '/* ';  
$header[]= 'Accept-Language: zh-cn ';  
$header[]= 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727) ';  
$header[]= 'Host: '.$你的目标HOST;  
$header[]= 'Connection: Keep-Alive ';  
$header[]= 'Cookie: '.$你的COOKIE串;  curl_setopt($curlHandel,CURLOPT_HTTPHEADER,$header); 

PHP 相关文章推荐
安装APACHE
Jan 15 PHP
基于asp+ajax和数据库驱动的二级联动菜单
May 06 PHP
PHP自动选择 连接本地还是远程数据库
Dec 02 PHP
通过JavaScript或PHP检测Android设备的代码
Mar 09 PHP
php中随机显示图片的函数代码
Jun 23 PHP
PHP file_exists问题杂谈
May 07 PHP
PHP之生成GIF动画的实现方法
Jun 07 PHP
php使用Jpgraph绘制柱形图的方法
Jun 10 PHP
php实现倒计时效果
Dec 19 PHP
php实现图片上传并进行替换操作
Mar 15 PHP
微信红包随机生成算法php版
Jul 21 PHP
使用WAMP搭建PHP本地开发环境
May 10 PHP
ThinkPHP的RBAC(基于角色权限控制)深入解析
Jun 17 #PHP
深入PHP curl参数的详解
Jun 17 #PHP
解析php curl_setopt 函数的相关应用及介绍
Jun 17 #PHP
PHP中array_merge和array相加的区别分析
Jun 17 #PHP
php之Memcache学习笔记
Jun 17 #PHP
解析ajax事件的调用顺序
Jun 17 #PHP
sql注入与转义的php函数代码
Jun 17 #PHP
You might like
php修改时间格式的代码
2011/05/29 PHP
PHP内置加密函数详解
2016/11/20 PHP
jQuery ajax cache缓存问题
2010/07/01 Javascript
jquery高效反选具体实现
2013/05/05 Javascript
jquery dialog open后,服务器端控件失效的快速解决方法
2013/12/19 Javascript
解决window.opener=null;window.close(),只支持IE6不支持IE7,IE8的问题
2014/01/14 Javascript
JavaScript 学习笔记之基础中的基础
2015/01/13 Javascript
jquery果冻抖动效果实现方法
2015/01/15 Javascript
js改变style样式和css样式的简单实例
2016/06/28 Javascript
Jquery uploadify 多余的Get请求(404错误)的解决方法
2017/01/26 Javascript
使用ES6语法重构React代码详解
2017/05/09 Javascript
vue封装第三方插件并发布到npm的方法
2017/09/25 Javascript
JavaScript中为事件指定处理程序的五种方式分析
2018/07/27 Javascript
基于Vue sessionStorage实现保留搜索框搜索内容
2020/06/01 Javascript
微信小程序12行js代码自己写个滑块功能(推荐)
2020/07/15 Javascript
[01:15:45]DOTA2上海特级锦标赛B组小组赛#1 Alliance VS Spirit第一局
2016/02/26 DOTA
[01:14:31]Secret vs VG 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
wxPython学习之主框架实例
2014/09/28 Python
python制作填词游戏步骤详解
2019/05/05 Python
使用Python正则表达式操作文本数据的方法
2019/05/14 Python
Django 过滤器汇总及自定义过滤器使用详解
2019/07/19 Python
Ubuntu下Python+Flask分分钟搭建自己的服务器教程
2019/11/19 Python
python GUI库图形界面开发之PyQt5访问系统剪切板QClipboard类详细使用方法与实例
2020/02/27 Python
一文详述 Python 中的 property 语法
2020/09/01 Python
Pottery Barn阿联酋:购买家具、家居装饰及更多
2019/12/08 全球购物
编辑个人求职信范文
2013/09/21 职场文书
优秀大学生的自我评价
2014/01/16 职场文书
旷课检讨书1000字
2014/02/14 职场文书
工业自动化专业自荐信范文
2014/04/10 职场文书
个人工作总结范文2014
2014/11/07 职场文书
2014年度培训工作总结
2014/11/27 职场文书
万里长城导游词
2015/01/30 职场文书
成品仓管员岗位职责
2015/04/01 职场文书
2015年精神文明建设工作总结
2015/04/21 职场文书
自荐信范文
2019/05/20 职场文书
Python制作一个随机抽奖小工具的实现
2021/07/07 Python