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函数
Dec 06 PHP
Ajax+PHP 边学边练之四 表单
Nov 27 PHP
php 空格,换行,跳格使用说明
Dec 18 PHP
PHP 抓取网页图片并且另存为的实现代码
Mar 24 PHP
php高级编程-函数-郑阿奇
Jul 04 PHP
php+xml实现在线英文词典之添加词条的方法
Jan 23 PHP
php生成唯一数字id的方法汇总
Nov 18 PHP
PHP如何将XML转成数组
Apr 04 PHP
phpmailer简单发送邮件的方法(附phpmailer源码下载)
Jun 13 PHP
php生成mysql的数据字典
Jul 07 PHP
PHP遍历目录文件的常用方法小结
Feb 03 PHP
PHP中迭代器的简单实现及Yii框架中的迭代器实现方法示例
Apr 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
php 网页游戏开发入门教程一(webgame+design)
2009/10/26 PHP
php empty() 检查一个变量是否为空
2011/11/10 PHP
php操作JSON格式数据的实现代码
2011/12/24 PHP
php模板原理讲解
2013/11/13 PHP
标准PHP的AES加密算法类
2015/03/12 PHP
PHP调试的强悍利器之PHPDBG
2016/02/22 PHP
Laravel 读取 config 下的数据方法
2019/10/13 PHP
javascript引导程序
2008/10/26 Javascript
JQuery 网站换肤功能实现代码
2009/11/02 Javascript
JS获取页面窗口大小的代码解读
2011/12/01 Javascript
在每个匹配元素的外部插入新元素的方法
2013/12/20 Javascript
浅谈js 闭包引起的内存泄露问题
2015/06/22 Javascript
jQuery实现表单步骤流程导航代码分享
2015/08/28 Javascript
js关于getImageData跨域问题的解决方法
2016/10/14 Javascript
详解Angular5路由传值方式及其相关问题
2018/04/28 Javascript
Angular6 Filter实现页面搜索的示例代码
2018/12/02 Javascript
详解在create-react-app使用less与antd按需加载
2018/12/06 Javascript
JS实现鼠标拖拽盒子移动及右键点击盒子消失效果示例
2019/01/29 Javascript
Nginx设置为Node.js的前端服务器方法总结
2019/03/27 Javascript
Vue.extend实现挂载到实例上的方法
2019/05/01 Javascript
JS简单表单验证功能完整示例
2020/01/26 Javascript
Vue+Vuex实现自动登录的知识点详解
2020/03/04 Javascript
在Docker上开始部署Python应用的教程
2015/04/17 Python
Python和Java进行DES加密和解密的实例
2018/01/09 Python
使用Python爬了4400条淘宝商品数据,竟发现了这些“潜规则”
2018/03/23 Python
Python处理菜单消息操作示例【基于win32ui模块】
2018/05/09 Python
Django处理Ajax发送的Get请求代码详解
2019/07/29 Python
python 基于opencv 实现一个鼠标绘图小程序
2020/12/11 Python
新西兰领先的鞋类和靴子网上商城:Merchant 1948
2017/09/08 全球购物
英国设计的甲板鞋和船鞋:Chatham
2018/12/06 全球购物
草莓网中国:StrawberryNet中国
2020/08/17 全球购物
2014年团员学习十八大思想汇报
2014/09/13 职场文书
爱的教育读书笔记
2015/06/26 职场文书
祝寿主持词
2015/07/02 职场文书
采购部2015年度工作总结
2015/07/24 职场文书
python 学习GCN图卷积神经网络
2022/05/11 Python