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数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系
Nov 02 PHP
解析PHP生成静态html文件的三种方法
Jun 18 PHP
解析php如何将日志写进syslog
Jun 28 PHP
JoshChen_web格式编码UTF8-无BOM的小细节分析
Aug 16 PHP
php+html5使用FormData对象提交表单及上传图片的方法
Feb 11 PHP
PHP实现事件机制实例分析
Jun 26 PHP
Laravel手动分页实现方法详解
Oct 09 PHP
PHP文件操作详解
Dec 30 PHP
php文件包含目录配置open_basedir的使用与性能详解
Apr 03 PHP
PHP实现mysqli批量执行多条语句的方法示例
Jul 22 PHP
PHP PDOStatement::fetchAll讲解
Jan 31 PHP
详细分析PHP7与PHP5区别
Jun 26 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
关于PHPDocument 代码注释规范的总结
2013/06/25 PHP
PHP邮件发送类PHPMailer用法实例详解
2014/09/22 PHP
php商品对比功能代码分享
2015/09/24 PHP
Adnroid 微信内置浏览器清除缓存
2016/07/11 PHP
5个书写JavaScript代码的坏习惯,看看你中枪了没?
2014/11/06 Javascript
详解Weex基于Vue2.0开发模板搭建
2017/03/20 Javascript
Vue 单文件中的数据传递示例
2017/03/21 Javascript
微信小程序实现动态设置placeholder提示文字及按钮选中/取消状态的方法
2017/12/14 Javascript
JsChart组件使用详解
2018/03/04 Javascript
node实现的爬虫功能示例
2018/05/04 Javascript
jQuery md5加密插件jQuery.md5.js用法示例
2018/08/24 jQuery
微信小程序实现无限滚动列表
2020/05/29 Javascript
JavaScript学习笔记之DOM操作实例分析
2019/01/08 Javascript
详解vue为什么要求组件模板只能有一个根元素
2019/07/22 Javascript
JS中的算法与数据结构之字典(Dictionary)实例详解
2019/08/20 Javascript
vue中实现回车键登录功能
2020/02/19 Javascript
nodejs各种姿势断点调试的方法
2020/06/18 NodeJs
js实现3D粒子酷炫动态旋转特效
2020/09/13 Javascript
python常规方法实现数组的全排列
2015/03/17 Python
使用Python制作微信跳一跳辅助
2018/01/31 Python
Jupyter notebook快速入门教程(推荐)
2020/05/18 Python
keras Lambda自定义层实现数据的切片方式,Lambda传参数
2020/06/11 Python
python中 _、__、__xx__()区别及使用场景
2020/06/30 Python
python使用smtplib模块发送邮件
2020/12/17 Python
使用Html5 Stream开发实时监控系统
2020/06/02 HTML / CSS
主要的Ajax框架都有什么
2013/11/14 面试题
金融专业大学生自我评价
2014/01/09 职场文书
2014年党务公开实施方案
2014/02/27 职场文书
反对四风自我剖析材料
2014/10/07 职场文书
老兵退伍感言
2015/08/03 职场文书
党员读书活动心得体会
2016/01/14 职场文书
管理者日常工作必备:22条企业管理流程模板!
2019/07/12 职场文书
标会主持词应该怎么写?
2019/08/15 职场文书
解决Golang中ResponseWriter的一个坑
2021/04/27 Golang
如何判断pytorch是否支持GPU加速
2021/06/01 Python
MySQL中CURRENT_TIMESTAMP的使用方式
2021/11/27 MySQL