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 相关文章推荐
PHP4实际应用经验篇(5)
Oct 09 PHP
How do I change MySQL timezone?
Mar 26 PHP
php清空(删除)指定目录下的文件,不删除目录文件夹的实现代码
Sep 04 PHP
php结合js实现点击超链接执行删除确认操作
Oct 31 PHP
php通过rmdir删除目录的简单用法
Mar 18 PHP
64位windows系统下安装Memcache缓存
Dec 06 PHP
PHP实现文件上传与下载实例与总结
Mar 13 PHP
详解Yii2高级版引入bootstrap.js的一个办法
Mar 21 PHP
Redis构建分布式锁
Mar 28 PHP
thinkPHP框架实现多表查询的方法
Jun 14 PHP
PHP使用ActiveMQ实现消息队列的方法详解
May 31 PHP
php获取小程序码的实现代码(B类接口)
Jun 13 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中time()和mktime()方法的区别
2013/09/28 PHP
php的webservice的wsdl的XML无法显示问题的解决方法
2014/03/11 PHP
PHP实现QQ登录实例代码
2016/01/14 PHP
php使用 readfile() 函数设置文件大小大小的方法
2017/08/11 PHP
php curl发送请求实例方法
2019/08/01 PHP
jQuery Ajax请求状态管理器打包
2012/05/03 Javascript
js 验证身份证信息有效性
2014/03/28 Javascript
jQuery 处理页面的事件详解
2015/01/20 Javascript
jQuery动画效果图片轮播特效
2016/01/12 Javascript
第二篇Bootstrap起步
2016/06/21 Javascript
jQuery实现自动调用和触发某个事件的方法
2016/11/18 Javascript
详解基于angular-cli配置代理解决跨域请求问题
2017/07/05 Javascript
使用Node.js实现RESTful API的示例
2017/08/01 Javascript
浅谈vue+webpack项目调试方法步骤
2017/09/11 Javascript
vue配置多页面的实现方法
2018/05/22 Javascript
vue2使用keep-alive缓存多层列表页的方法
2018/09/21 Javascript
vue中,在本地缓存中读写数据的方法
2018/09/21 Javascript
图片文字识别(OCR)插件Ocrad.js教程
2018/11/26 Javascript
深入解析koa之异步回调处理
2019/06/17 Javascript
JavaScript this在函数中的指向及实例详解
2019/10/14 Javascript
《javascript设计模式》学习笔记五:Javascript面向对象程序设计工厂模式实例分析
2020/04/08 Javascript
[02:38]DOTA2亚洲邀请赛 IG战队巡礼
2015/02/03 DOTA
Python程序语言快速上手教程
2012/07/18 Python
Python遍历目录中的所有文件的方法
2016/07/08 Python
keras自动编码器实现系列之卷积自动编码器操作
2020/07/03 Python
如何基于Python Matplotlib实现网格动画
2020/07/20 Python
用python实现一个简单的验证码
2020/12/09 Python
python生成word合同的实例方法
2021/01/12 Python
新西兰Bookabach:查找全球度假屋
2020/12/03 全球购物
C#面试问题
2016/07/29 面试题
创先争优活动党员公开承诺书
2014/08/29 职场文书
2015年妇联工作总结范文
2015/04/22 职场文书
关于五一放假的通知
2015/08/18 职场文书
医院岗前培训心得体会
2016/01/08 职场文书
Oracle设置DB、监听和EM开机启动的方法
2021/04/25 Oracle
Python实现批量将文件复制到新的目录中再修改名称
2022/04/12 Python