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 获取完整url地址
Dec 20 PHP
PHP __autoload函数(自动载入类文件)的使用方法
Feb 04 PHP
批量去除PHP文件中bom的PHP代码
Mar 13 PHP
$_GET['goods_id']+0 的使用详解
Jun 06 PHP
解析php中如何调用用户自定义函数
Aug 06 PHP
最常用的8款PHP调试工具
Jul 06 PHP
解析PHP的Yii框架中cookie和session功能的相关操作
Mar 17 PHP
Linux下快速搭建php开发环境
Mar 13 PHP
PHP编程中的Session阻塞问题与解决方法分析
Aug 07 PHP
Laravel 5.4因特殊字段太长导致migrations报错的解决
Oct 22 PHP
PHP写API输出的时用echo的原因详解
Apr 28 PHP
Laravel框架实现的上传图片到七牛功能详解
Sep 06 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
jQuery Ajax之load()方法
2009/10/12 Javascript
JavaScript Event学习第三章 早期的事件处理程序
2010/02/07 Javascript
关于JavaScript的面向对象和继承有利新手学习
2013/01/11 Javascript
jquery实现每个数字上都带进度条的幻灯片
2013/02/20 Javascript
javascript修改表格背景色实例代码分享
2013/12/10 Javascript
类似php的js数组的in_array函数自定义方法
2013/12/27 Javascript
用js+iframe形成页面的一种遮罩效果的具体实现
2013/12/31 Javascript
jQuery实现气球弹出框式的侧边导航菜单效果
2015/09/22 Javascript
JS使用正则表达式除去字符串中重复字符的方法
2015/11/05 Javascript
学习JavaScript设计模式(单例模式)
2015/11/26 Javascript
利用python分析access日志的方法
2016/10/26 Javascript
利用D3.js实现最简单的柱状图示例代码
2016/12/09 Javascript
JS简单实现点击按钮或文字显示遮罩层的方法
2017/04/27 Javascript
Vue.js结合Ueditor富文本编辑器的实例代码
2017/07/11 Javascript
微信小程序获取循环元素id以及wx.login登录操作
2017/08/17 Javascript
vue 中使用 watch 出现了如下的报错的原因分析
2019/05/21 Javascript
vscode 插件开发 + vue的操作方法
2020/06/05 Javascript
JavaScript 实现下雪特效的示例代码
2020/09/09 Javascript
Python多线程编程简单介绍
2015/04/13 Python
Python将多个excel文件合并为一个文件
2018/01/03 Python
树莓派4B+opencv4+python 打开摄像头的实现方法
2019/10/18 Python
解决springboot yml配置 logging.level 报错问题
2020/02/21 Python
Html5新增标签有哪些
2017/04/13 HTML / CSS
优秀通讯员事迹材料
2014/01/28 职场文书
纪检干部现实表现材料
2014/08/21 职场文书
法定代表人授权委托书
2014/09/19 职场文书
公司周年庆典标语
2014/10/07 职场文书
大学生个人学习总结
2015/02/15 职场文书
通知函的格式
2015/04/27 职场文书
学校党支部公开承诺书
2015/04/30 职场文书
刑事上诉状范文
2015/05/22 职场文书
贷款收入证明范本
2015/06/12 职场文书
学生会自荐信
2019/05/16 职场文书
Python中json.load()和json.loads()有哪些区别
2021/06/07 Python
Win11查看设备管理器
2022/04/19 数码科技
Win10多屏显示如何设置?Win10电脑多屏显示设置操作方法
2022/07/07 数码科技