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验证码类代码分享(已封装成类)
Jul 17 PHP
php仿QQ验证码的实例分析
Jul 01 PHP
PHP冒泡算法详解(递归实现)
Nov 10 PHP
php实现计算百度地图坐标之间距离的方法
May 05 PHP
Yii 2.0如何使用页面缓存方法示例
May 23 PHP
PHP 传输会话curl函数的实例详解
Sep 12 PHP
详解php curl带有csrf-token验证模拟提交方法
Apr 18 PHP
php JWT在web端中的使用方法教程
Sep 06 PHP
PHP让网站移动访问更加友好方法
Feb 14 PHP
PHP实现腾讯短网址生成api接口实例
Dec 08 PHP
PHP读取文件或采集时解决中文乱码
Mar 09 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获取url字符串截取路径的文件名和扩展名的函数
2010/01/22 PHP
php更改目录及子目录下所有的文件后缀的代码
2010/09/24 PHP
PHP的cURL库简介及使用示例
2015/02/06 PHP
Ruffy javascript 学习笔记
2009/11/30 Javascript
jquery 获取标签名(tagName)示例代码
2013/07/11 Javascript
jQuery的显示和隐藏方法与css隐藏的样式对比
2013/10/18 Javascript
jquery bind(click)传参让列表中每行绑定一个事件
2014/08/06 Javascript
Javascript数组与字典用法分析
2014/12/13 Javascript
Json按某个键的值进行排序
2016/12/22 Javascript
详解vuex 中的 state 在组件中如何监听
2017/05/23 Javascript
关于react-router的几种配置方式详解
2017/07/24 Javascript
js原生代码实现轮播图的实例讲解
2017/07/28 Javascript
浅谈js中的bind
2019/03/18 Javascript
Python+MongoDB自增键值的简单实现
2016/11/04 Python
python中异常报错处理方法汇总
2016/11/20 Python
Python中作用域的深入讲解
2018/12/10 Python
对Python中画图时候的线类型详解
2019/07/07 Python
Django模板语言 Tags使用详解
2019/09/09 Python
原来我一直安装 Python 库的姿势都不对呀
2019/11/11 Python
django queryset相加和筛选教程
2020/05/18 Python
浅谈Python 函数式编程
2020/06/20 Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
2020/11/24 Python
python自动生成sql语句的脚本
2021/02/24 Python
美国领先的汽车轮胎和轮毂供应商:TireBuyer
2016/07/21 全球购物
Java多态性的定义以及类型
2014/09/16 面试题
电话销售经理岗位职责
2013/12/07 职场文书
管理学专业个人求职信范文
2013/12/13 职场文书
单位提档介绍信
2014/01/17 职场文书
2014年端午节活动方案
2014/03/11 职场文书
《二泉映月》教学反思
2014/04/15 职场文书
应届生自荐书
2014/06/23 职场文书
小学运动会通讯稿
2015/07/18 职场文书
Nginx访问日志及错误日志参数说明
2021/03/31 Servers
MySQL 存储过程的优缺点分析
2021/05/20 MySQL
Python爬虫基础初探selenium
2021/05/31 Python
html网页引入svg图片的4种方式
2022/08/05 HTML / CSS