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数据库连接
Oct 09 PHP
PHP文件下载类
Dec 06 PHP
理解PHP5中static和const关键字的区别
Mar 19 PHP
php方法调用模式与函数调用模式简例
Sep 20 PHP
通过缓存数据库结果提高PHP性能的原理介绍
Sep 05 PHP
php 批量生成html,txt文件的实现代码
Jun 26 PHP
ThinkPHP中ajax使用实例教程
Aug 22 PHP
php实现粘贴截图并完成上传功能
May 17 PHP
PHP自定义函数实现格式化秒的方法
Sep 14 PHP
PHP中十六进制颜色与RGB颜色值互转的方法
Mar 18 PHP
详解提高使用Java反射的效率方法
Apr 29 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
Mar 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实现维护文件代码
2007/06/14 PHP
深入理解PHP原理之错误抑制与内嵌HTML分析
2011/05/02 PHP
php 广告调用类代码(支持Flash调用)
2011/08/11 PHP
PHP函数积累总结
2019/03/19 PHP
PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】
2019/03/27 PHP
Web版彷 Visual Studio 2003 颜色选择器
2007/01/09 Javascript
提高网站信任度的技巧
2008/10/17 Javascript
Javascript 变量作用域 两个可能会被忽略的小特性
2010/03/23 Javascript
使用JS取得焦点(focus)元素代码
2014/03/22 Javascript
jquery操作select方法汇总
2015/02/05 Javascript
JavaScript取得键盘按下方向键是哪个的方法
2015/08/04 Javascript
javascript实现手机震动API代码
2015/08/05 Javascript
JS实现兼容性好,带缓冲的动感网页右键菜单效果
2015/09/18 Javascript
BootstrapValidator不触发校验的实现代码
2016/09/28 Javascript
详解如何在Angular中快速定位DOM元素
2017/05/17 Javascript
基于vue2框架的机器人自动回复mini-project实例代码
2017/06/13 Javascript
Bootstrap datepicker日期选择器插件使用详解
2017/07/26 Javascript
JS库 Highlightjs 添加代码行号的实现代码
2017/09/13 Javascript
axios 处理 302 状态码的解决方法
2018/04/10 Javascript
jquery实现穿梭框功能
2021/01/19 jQuery
k8s node节点重新加入master集群的实现
2021/02/22 Javascript
Python写的英文字符大小写转换代码示例
2015/03/06 Python
Python对象转JSON字符串的方法
2016/04/27 Python
使用tensorflow实现AlexNet
2017/11/20 Python
Python返回数组/List长度的实例
2018/06/23 Python
浅谈Python的list中的选取范围
2018/11/12 Python
对python numpy.array插入一行或一列的方法详解
2019/01/29 Python
python爬虫的一个常见简单js反爬详解
2019/07/09 Python
django的model操作汇整详解
2019/07/26 Python
python中的Elasticsearch操作汇总
2019/10/30 Python
Pytorch基本变量类型FloatTensor与Variable用法
2020/01/08 Python
团委竞选演讲稿
2014/04/24 职场文书
团干部培训方案
2014/06/03 职场文书
小学标准化建设汇报材料
2014/08/16 职场文书
作文之亲情600字
2019/09/23 职场文书
Golang 实现超大文件读取的两种方法
2021/04/27 Golang