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入门学习知识点七 PHP函数的基本应用
Jul 14 PHP
php数组函数序列之each() - 获取数组当前内部指针所指向元素的键名和键值,并将指针移到下一位
Oct 31 PHP
APACHE的AcceptPathInfo指令使用介绍
Jan 18 PHP
ThinkPHP中Session用法详解
Nov 29 PHP
php中define用法实例
Jul 30 PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
Dec 21 PHP
CI框架数据库查询缓存优化的方法
Nov 21 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
Feb 07 PHP
php7新特性的理解和比较总结
Apr 14 PHP
基于laravel belongsTo使用详解
Oct 18 PHP
PHP高并发和大流量解决方案整理
Dec 24 PHP
PHP正则之正向预查与反向预查讲解与实例
Apr 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
一个目录遍历函数
2006/10/09 PHP
在smarty模板中使用PHP函数的方法
2011/04/23 PHP
Javascript 函数对象的多重身份
2009/06/28 Javascript
ajax更新数据后,jquery、jq失效问题
2011/03/16 Javascript
JS随即打乱数组实现代码
2012/12/03 Javascript
jquery将一个表单序列化为一个对象的方法
2014/01/03 Javascript
浅谈Node.js中的定时器
2015/06/18 Javascript
使用bootstrap validator的remote验证代码经验分享(推荐)
2016/09/21 Javascript
AngularJS实现根据变量改变动态加载模板的方法
2016/11/04 Javascript
移动端日期插件Mobiscroll.js使用详解
2016/12/19 Javascript
Ajax跨域实现代码(后台jsp)
2017/01/21 Javascript
防止重复发送 Ajax 请求
2017/02/15 Javascript
EasyUI 数据表格datagrid列自适应内容宽度的实现
2019/07/18 Javascript
用Python编写一个基于终端的实现翻译的脚本
2015/04/24 Python
基于python中pygame模块的Linux下安装过程(详解)
2017/11/09 Python
ubuntu安装mysql pycharm sublime
2018/02/20 Python
Python中Numpy包的安装与使用方法简明教程
2018/07/03 Python
Django生成PDF文档显示在网页上以及解决PDF中文显示乱码的问题
2019/07/04 Python
使用TensorFlow对图像进行随机旋转的实现示例
2020/01/20 Python
检测tensorflow是否使用gpu进行计算的方式
2020/02/03 Python
爬虫代理的cookie如何生成运行
2020/09/22 Python
python爬虫利器之requests库的用法(超全面的爬取网页案例)
2020/12/17 Python
selenium+headless chrome爬虫的实现示例
2021/01/08 Python
Python爬取网站图片并保存的实现示例
2021/02/26 Python
Css3圆角边框制作代码
2015/11/18 HTML / CSS
移动端HTML5开发神器之vconsole详解
2020/12/15 HTML / CSS
Luxplus瑞典:香水和美容护理折扣
2018/01/28 全球购物
巴西电子、家电、智能手机购物网站:Girafa
2019/06/04 全球购物
是什么让J2EE适合用来开发多层的分布式的应用
2015/01/16 面试题
国际商务系学生个人的自我评价
2013/11/26 职场文书
禁止高声喧哗的标语
2014/06/11 职场文书
2014年党员干部四风问题自我剖析材料
2014/09/29 职场文书
拾金不昧感谢信范文
2015/01/21 职场文书
大学开学感言
2015/08/01 职场文书
幼儿园大班教育随笔
2015/08/14 职场文书
小数乘法教学反思
2016/02/22 职场文书