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 相关文章推荐
PHP序列号生成函数和字符串替换函数代码
Jun 07 PHP
PhpMyAdmin出现export.php Missing parameter: what /export_type错误解决方法
Aug 09 PHP
深入php处理整数函数的详解
Jun 09 PHP
浅析php过滤html字符串,防止SQL注入的方法
Jul 02 PHP
PHP中require和include路径问题详解
Dec 25 PHP
php分割合并两个字符串的函数实例
Jun 19 PHP
PHP程序员不应该忽略的3点
Oct 09 PHP
php实现smarty模板无限极分类的方法
Dec 07 PHP
smarty中改进truncate使其支持中文的方法
May 30 PHP
CI框架实现框架前后端分离的方法详解
Dec 30 PHP
PHP设计模式之工厂模式详解
Oct 24 PHP
php获取ajax的headers方法与内容实例
Dec 27 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模板函数 正则实现代码
2012/10/15 PHP
php数组函数array_walk用法示例
2016/05/26 PHP
Egret引擎开发指南之编译项目
2014/09/03 Javascript
JQuery给网页更换皮肤的方法
2015/05/30 Javascript
JavaScript实现算术平方根算法-代码超简单
2015/09/11 Javascript
Bootstrap每天必学之栅格系统(布局)
2015/11/25 Javascript
JS实现放大、缩小及拖拽图片的方法【可兼容IE、火狐】
2016/08/23 Javascript
bootstrap datepicker 与bootstrapValidator同时使用时选择日期后无法正常触发校验的解决思路
2016/09/28 Javascript
微信小程序 textarea 详解及简单使用方法
2016/12/05 Javascript
微信小程序官方动态自定义底部tabBar的例子
2019/09/04 Javascript
vue表单中遍历表单操作按钮的显示隐藏示例
2019/10/30 Javascript
vue element 中的table动态渲染实现(动态表头)
2019/11/21 Javascript
vue 动态给每个页面添加title、关键词和描述的方法
2020/08/28 Javascript
python实现应用程序在右键菜单中添加打开方式功能
2017/01/09 Python
Python实现字符串中某个字母的替代功能
2019/10/21 Python
Python实现i人事自动打卡的示例代码
2020/01/09 Python
Tensorflow 卷积的梯度反向传播过程
2020/02/10 Python
Python多重继承之菱形继承的实例详解
2020/02/12 Python
解决 jupyter notebook 回车换两行问题
2020/04/15 Python
Python如何在单元测试中给对象打补丁
2020/08/03 Python
Python 整行读取文本方法并去掉readlines换行\n操作
2020/09/03 Python
浅谈cookie和localStorage那些事
2019/08/27 HTML / CSS
世界汽车零件:World Car Parts
2019/09/04 全球购物
size?荷兰官方网站:英国高级运动鞋精品店
2020/07/24 全球购物
工程现场管理求职自荐信
2013/10/02 职场文书
毕业生造价工程师求职信
2013/10/17 职场文书
销售文员岗位职责
2013/11/29 职场文书
优秀教师先进事迹
2014/01/22 职场文书
教师绩效工资方案
2014/02/01 职场文书
服务之星事迹材料
2014/05/03 职场文书
党代会心得体会
2014/09/04 职场文书
法定代表人资格证明书
2014/09/11 职场文书
2015七夕情人节宣传语
2015/07/14 职场文书
2020优秀员工演讲稿(三篇)
2019/10/17 职场文书
SpringDataJPA实体类关系映射配置方式
2021/12/06 Java/Android
深入理解MySQL中MVCC与BufferPool缓存机制
2022/05/25 MySQL